MySQL 表约束超详细

一给  金牌会员 | 2024-6-15 01:33:39 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 809|帖子 809|积分 2427

目录
一. 主键约束——PRIMARY KEY
1.在建表时设置主键约束
设置单字段主键
设置联合主键
2. 在修改表的时候添加主键约束
3. 删除主键约束
4. 【增补】 MySQL设置主键自增长 :
二. 外键约束——FOREIGN KEY
1.在创建表时设置外键约束
2. 在修改表时添加外键约束
3. 删除外键约束
三. 唯一约束——UNIQUE KEY
1.在创建表时设置唯一约束
2. 在修改表时添加唯一约束
3. 删除唯一约束
四. 检查约束——CHECK
1.在创建表时设置检查约束
2. 在修改表时添加检查约束
3. 删除检查约束
五. 非空约束——NOT NULL
1.在创建表时设置非空约束
2. 在修改表时添加非空约束:
3. 删除非空约束
六. 默认值约束——DEFAULT
1.在创建表时设置默认值约束
2. 在修改表时添加默认值约束
3. 删除默认值


在MySQL里,“约束”指的是对表中数据的一种限制约束,它能够确保数据库中数据的准确性和有效性
比如有的数据是必填项,就像身份认证的时候,大概填注册信息的时候,手机号身份证这种就不能空着,以是就有了非空约束;又有的数据比如用户的唯一id,不能跟其他人的一样,以是就需要利用唯一约束等等。
在MySQL中主要有6种约束:主键约束、外键约束、唯一约束、检查约束、非空约束和默认值约束。
一. 主键约束——PRIMARY KEY

“主键约束“是6种约束中利用最多的约束。
在建立数据表的时候,一样平常情况下,为了方便更快地查找表中的记载,都会要求在表中设置一个“主键”。”主键“是表里面的一个特殊字段,这个字段能够唯一标识该表中的每条信息。
主键分为“单字段主键”和“多字段联合主键”,而且在利用主键的时候需要注意以下几个点:


  • 一个表只能定义一个主键;
  • 主键值必须唯一标识表中的每一行,而且不能出现null的情况,即表中不能存在有雷同主键的两行或两行以上数据,严酷服从唯一性原则
  • 一个字段名只能在联合主键字段表中出现一次;
  • 联合主键不能包含不须要的多余字段,以满足最小化原则

1.在建表时设置主键约束

设置单字段主键

1)在定义字段的时候设置主键约束,语法格式:
  1. <字段名> <数据类型> PRIMARY KEY [默认值]
复制代码
例:在数据库中创建学生信息数据表st_info,主键为st_id, SQL语句以及运行结果如下:
  1. create table st_info(
  2. st_id int(10) primary key,
  3.   name varchar(20),
  4.   class varchar(10),
  5.   gender varchar(4),
  6.   age int(2)
  7. );
  8. mysql> desc st_info;
  9. +--------+-------------+------+-----+---------+-------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +--------+-------------+------+-----+---------+-------+
  12. | st_id | int | NO | PRI | NULL | |
  13. | name | varchar(20) | YES |     | NULL |       |
  14. | class | varchar(10) | YES | | NULL   | |
  15. | gender | varchar(4) | YES |     | NULL |       |
  16. | age | int | YES | | NULL | |
  17. +--------+-------------+------+-----+---------+-------+
  18. 5 rows in set (0.00 sec)
复制代码
2)在定义完所有字段之后指定部件,语法格式:
  1. [CONSTRAINT <约束名>] PRIMARY KEY [字段名]
复制代码
 在数据库中创建学生信息数据表st_info2,主键为st_id, SQL语句以及运行结果如下:
  1. create table st_info2(
  2. st_id int(10),
  3.   name varchar(20),
  4.   class varchar(10),
  5.   gender varchar(4),
  6.   age int(2),
  7.    primary key(st_id)
  8. );
  9. mysql> desc st_info2;
  10. +--------+-------------+------+-----+---------+-------+
  11. | Field | Type | Null | Key | Default | Extra |
  12. +--------+-------------+------+-----+---------+-------+
  13. | st_id | int | NO | PRI | NULL | |
  14. | name | varchar(20) | YES |     | NULL |       |
  15. | class | varchar(10) | YES | | NULL   | |
  16. | gender | varchar(4) | YES |     | NULL |       |
  17. | age | int | YES | | NULL | |
  18. +--------+-------------+------+-----+---------+-------+
  19. 5 rows in set (0.00 sec)
复制代码
设置联合主键

联合主键即一张表的主键由多个字段构成。
比如在学生信息表中,可以设置st_id跟name来作为联合主键,语法格式以及SQL语句实现为:
  1. PRIMARY KEY [字段1,字段2,…,字段n]
  2. create table st_info3(
  3.   st_id int(10),
  4.   name varchar(20),
  5.   class varchar(10),
  6.   gender varchar(4),
  7.   age int(2),
  8.    primary key(st_id,name)
  9. );
  10. mysql> desc st_info3;
  11. +--------+-------------+------+-----+---------+-------+
  12. | Field | Type | Null | Key | Default | Extra |
  13. +--------+-------------+------+-----+---------+-------+
  14. | st_id | int | NO | PRI | NULL | |
  15. | name | varchar(20) | NO | PRI | NULL |       |
  16. | class | varchar(10) | YES | | NULL   | |
  17. | gender | varchar(4) | YES |     | NULL |       |
  18. | age | int | YES | | NULL | |
  19. +--------+-------------+------+-----+---------+-------+
  20. 5 rows in set (0.00 sec)
复制代码
需要注意的是,在设置联合主键的时候,不能在每个字段名后面直接声明主键约束。
2. 在修改表的时候添加主键约束

如果在创建表的时候没有设置主键约束,还可以在修改表时举行添加,但是设置成主键约束的字段不允许有空值。语法格式:
  1. ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
  2. mysql> desc st_info4;
  3. +--------+-------------+------+-----+---------+-------+
  4. | Field | Type | Null | Key | Default | Extra |
  5. +--------+-------------+------+-----+---------+-------+
  6. | st_id | int | NO | | NULL | |
  7. | name | varchar(20) | NO |     | NULL |       |
  8. | class | varchar(10) | YES | | NULL   | |
  9. | gender | varchar(4) | YES |     | NULL |       |
  10. | age | int | YES | | NULL | |
  11. +--------+-------------+------+-----+---------+-------+
复制代码
将st_id与name设置成主键:
  1. mysql> alter table st_info4 add primary key(st_id,name);
  2. Query OK, 0 rows affected (0.04 sec)
  3. Records: 0 Duplicates: 0  Warnings: 0
  4. mysql> desc st_info4;
  5. +--------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +--------+-------------+------+-----+---------+-------+
  8. | st_id | int | NO | PRI | NULL | |
  9. | name | varchar(20) | NO | PRI | NULL |       |
  10. | class | varchar(10) | YES | | NULL   | |
  11. | gender | varchar(4) | YES |     | NULL |       |
  12. | age | int | YES | | NULL | |
  13. +--------+-------------+------+-----+---------+-------+
  14. 5 rows in set (0.00 sec)
复制代码
3. 删除主键约束


当一个表中不需要主键约束时,就需要从表中将其删除。
 删除st_info4数据表中的主键约束:
  1. mysql> alter table st_info4 drop primary key;
  2. Query OK, 0 rows affected (0.06 sec)
  3. Records: 0 Duplicates: 0  Warnings: 0
  4. mysql> desc st_info4;
  5. +--------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +--------+-------------+------+-----+---------+-------+
  8. | st_id | int | NO | | NULL | |
  9. | name | varchar(20) | NO |     | NULL |       |
  10. | class | varchar(10) | YES | | NULL   | |
  11. | gender | varchar(4) | YES |     | NULL |       |
  12. | age | int | YES | | NULL | |
  13. +--------+-------------+------+-----+---------+-------+
  14. 5 rows in set (0.00 sec)
复制代码
4. 【增补】 MySQL设置主键自增长 :

在MySQL里,当主键定义为自增长后,主键的值就不需要自己再输入数据了,而是由数据库体系根据定义主动赋值,每增加一条记载,主键就会主动根据设置的步长举行增长。
在MySQL中自增长的关键字是AUTO_INCREMENT,语法格式为:
  1. 字段名 数据类型 AUTO_INCREMENT
复制代码
 创建学生信息表st_info5,指定st_id字段自增,
  1. create table st_info5(
  2.   st_id int(10) primary key auto_increment,
  3.     name varchar(20) not null,
  4.     class varchar(10),
  5.     gender varchar(4),
  6.     age int(2)
  7. );
复制代码
此时可以不消再手动插入st_id的数据:
  1. insert into st_info5(name,class,gender,age)
  2. values('王思瑶','管理学1班','女',18),
  3.       ('王绮梦','管理学1班','女',18),
  4.       ('李若彤','管理学1班','男',18);
  5.       
  6. mysql> select * from st_info5;
  7. +-------+--------+-----------+--------+------+
  8. | st_id | name | class     | gender | age |
  9. +-------+--------+-----------+--------+------+
  10. | 1 | 王思瑶 | 管理学1班 | 女 | 18 |
  11. | 2 | 王绮梦 | 管理学1班 | 女 | 18 |
  12. | 3 | 李若彤 | 管理学1班 | 男 | 18 |
  13. +-------+--------+-----------+--------+------+
  14. 3 rows in set (0.01 sec)
复制代码
但是在设置学号的时候不肯定是从1开始的,比如要从2000150001开始,则需要在建表之后设置自增的起始数据:
  1. create table st_info6(
  2.     st_id int(10) primary key auto_increment,
  3.     name varchar(20) not null,
  4.     class varchar(10),
  5.     gender varchar(4),
  6.     age int(2)
  7. )auto_increment=2000150001;
  8. insert into st_info6(name,class,gender,age)
  9. values('王思瑶','管理学1班','女',18),
  10.       ('王绮梦','管理学1班','女',18),
  11.       ('李若彤','管理学1班','男',18);
  12.       
  13. mysql> select * from st_info6;
  14. +------------+--------+-----------+--------+------+
  15. | st_id | name | class     | gender | age |
  16. +------------+--------+-----------+--------+------+
  17. | 2000150001 | 王思瑶 | 管理学1班 | 女 | 18 |
  18. | 2000150002 | 王绮梦 | 管理学1班 | 女 | 18 |
  19. | 2000150003 | 李若彤 | 管理学1班 | 男 | 18 |
  20. +------------+--------+-----------+--------+------+
  21. 3 rows in set (0.00 sec)
复制代码
值得注意的地方是,如果在插入某一行数据产生了报错,则终极自增字段大概会出现不连续的情况。
二. 外键约束——FOREIGN KEY


外键约束是表的一个特殊字段,广泛会和主键约束一起利用,用来确保数据的一致性。
对于两个具有关联关系的表来说,相干联字段中主键地点的表就是主表(父表),外键地点的表就是从表(子表)。
以是外键就是用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完备性。
在定义外键时需要服从以下规则:


  • 主表必须已经存在于数据库中,大概是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称做自参照表,这种布局称做自参照完备性;
  • 必须为主表定义主键;
  • 主键不能包含空值,但允许在外键中出现空值;
  • 在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键或候选键;
  • 外键中列的数量必须和主表的主键中列的数量雷同;
  • 外键中列的数据类型必须和主表主键中对应列的数据类型雷同。
1.在创建表时设置外键约束

在建表语句中,可以参加关键字FOREIGN KEY来指定外键,用REFERENCES来连接与主表的关系语法格式:
  1. CONSTRAINT <约束名>
  2. FOREIGN KEY <外键名>(字段名1,字段名2...)
  3. REFERENCES <主表名>(主键字段名)
复制代码
例:
① 利用1部分创建的st_info5数据表作为主表:
  1. mysql> desc st_info5;
  2. +--------+-------------+------+-----+---------+----------------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+----------------+
  5. | st_id | int | NO | PRI | NULL | auto_increment |
  6. | name | varchar(20) | NO |     | NULL |                |
  7. | class  | varchar(10) | YES  | | NULL    | |
  8. | gender | varchar(4) | YES |     | NULL |                |
  9. | age | int | YES | | NULL | |
  10. +--------+-------------+------+-----+---------+----------------+
复制代码
② 创建tb_1数据表,并在表上创建外键约束,使此中course_id作为外键关联到表st_info5的主键st_id:
  1. create table tb_1(
  2.     course_id int(8) not null auto_increment,
  3.     course_name varchar(25) not null,
  4.     constraint course_Choosing
  5.     foreign key fk_course(course_id)
  6.     references st_info5(st_id)
  7. )auto_increment=20015001;
  8. mysql> desc tb_1;
  9. +-------------+-------------+------+-----+---------+----------------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +-------------+-------------+------+-----+---------+----------------+
  12. | course_id | int | NO | MUL | NULL | auto_increment |
  13. | course_name | varchar(25) | NO |     | NULL |                |
  14. +-------------+-------------+------+-----+---------+----------------+
复制代码
上面语句执行成功之后,在表tb_1中添加了course_Choosing的约束名称,以及外键名称为fk_course的course_id字段,依赖于表st_info5的主键st_id。
2. 在修改表时添加外键约束

同样的可以在创建表之后再修改,SQL语句如下:
  1. alter table tb_1
  2. add
  3. constraint course_Choosing
  4. foreign key fk_course(course_id)
  5. references st_info5(st_id);
复制代码
这里需要注意的是,从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。比方两者都是int型大概都是char型数据。
3. 删除外键约束

当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表间的关联关系。
删除的语法格式:
  1. ALTER TABLE <表名>
  2. DROP
  3. FOREIGN KEY <外键约束名>;
复制代码
例:
  1. alter table tb_1
  2. drop
  3. foreign key fk_course;
复制代码
三. 唯一约束——UNIQUE KEY

唯一约束就是指所有记载中字段的值不能重复出现,比如给'id'字段加上唯一约束之后,每条记载的id值都是唯一的,不能出现重复的情况。
唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。与主键约束差别的是,唯一约束在一个表中可以有多个,而且设置唯一约束的列是允许有空值的,虽然只能有一个空值。
比方,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。
1.在创建表时设置唯一约束

唯一约束可以在创建表的时候直接举行设置,通常设置在除了主键以外的其他列上,语法格式如下:
  1. <字段名> <数据类型> UNIQUE
复制代码
 创建图书馆所有书本明细表book_info ,设定书本bk_id为主键,书本ISBN为唯一键,SQL语句如下:
  1. create table book_info(
  2.     bk_id int primary key,
  3.     ISBN varchar(17) unique,
  4.     author varchar(50),
  5.     Publisher varchar(20)
  6. );
  7. mysql> desc book_info;
  8. +-----------+-------------+------+-----+---------+-------+
  9. | Field | Type | Null | Key | Default | Extra |
  10. +-----------+-------------+------+-----+---------+-------+
  11. | bk_id | int | NO | PRI | NULL | |
  12. | ISBN | varchar(17) | YES | UNI | NULL |       |
  13. | author | varchar(50) | YES | | NULL | |
  14. | Publisher | varchar(20) | YES |     | NULL |       |
  15. +-----------+-------------+------+-----+---------+-------+
  16. 4 rows in set (0.00 sec)
复制代码
2. 在修改表时添加唯一约束

语法格式:
  1. ALTER TABLE <数据表名>
  2. ADD
  3. CONSTRAINT <唯一约束名> UNIQUE(<列名>);
复制代码
例 将book_info表中author字段设置为唯一约束:
  1. alter table book_info
  2. add
  3. constraint uni_author unique(author);
  4. mysql> desc book_info;
  5. +-----------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +-----------+-------------+------+-----+---------+-------+
  8. | bk_id | int | NO | PRI | NULL | |
  9. | ISBN | varchar(17) | YES | UNI | NULL |       |
  10. | author | varchar(50) | YES | UNI | NULL | |
  11. | Publisher | varchar(20) | YES |     | NULL |       |
  12. +-----------+-------------+------+-----+---------+-------+
  13. 4 rows in set (0.01 sec)
复制代码
3. 删除唯一约束

语法格式:
  1. ALTER TABLE <表名>
  2. DROP INDEX <唯一约束名>;
复制代码
例 删除book_info表中的唯一约束uni_author;
  1. alter table book_info
  2. drop index uni_author;
  3. mysql> desc book_info;
  4. +-----------+-------------+------+-----+---------+-------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +-----------+-------------+------+-----+---------+-------+
  7. | bk_id | int | NO | PRI | NULL | |
  8. | ISBN | varchar(17) | YES | UNI | NULL |       |
  9. | author | varchar(50) | YES | | NULL | |
  10. | Publisher | varchar(20) | YES |     | NULL |       |
  11. +-----------+-------------+------+-----+---------+-------+
  12. 4 rows in set (0.00 sec)
复制代码
四. 检查约束——CHECK


检查约束是用来检查数据表中字段值有效性的一种约束。
比方,学生信息表中的年龄字段是不能有负数的,而且数值范围也是有限制的。如果是大学生,正常年龄一样平常应该在 18~30 岁之间。在设置字段的检查约束时需要根据实际情况举行设置,这样能够减少无效数据的输入。
1.在创建表时设置检查约束

语法格式:
  1. CHECK(<约束条件>)
复制代码
 在persons表创建时id_p列创建check约束,约束条件为id_p列数据必须只包含大于0的整数:
  1. create table persons(
  2.     id_p int not null,
  3.     lastname varchar(255) not null,
  4.     firstname varchar(255),
  5.     address varchar(255),
  6.     city varchar(255),
  7.     check (id_p>0)
  8. );
  9. mysql> desc persons;
  10. +-----------+--------------+------+-----+---------+-------+
  11. | Field | Type | Null | Key | Default | Extra |
  12. +-----------+--------------+------+-----+---------+-------+
  13. | id_p | int | NO | | NULL | |
  14. | lastname | varchar(255) | NO |     | NULL |       |
  15. | firstname | varchar(255) | YES | | NULL | |
  16. | address | varchar(255) | YES |     | NULL |       |
  17. | city | varchar(255) | YES | | NULL | |
  18. +-----------+--------------+------+-----+---------+-------+
复制代码
2. 在修改表时添加检查约束

语法格式:
  1. ALTER TABLE <表名>
  2. ADD
  3. CONSTRAINT <检查约束名> CHECK(<检查约束>)
复制代码
 修改persons数据表,要求city字段为“上海”:
  1. create table persons(
  2.     id_p int not null,
  3.     lastname varchar(255) not null,
  4.     firstname varchar(255),
  5.     address varchar(255),
  6.     city varchar(255),
  7.     constraint chk_person check (id_p>0 and city='sandnes')
  8. );
  9. alter table persons
  10. add
  11. constraint chk_ct check(city='上海');
  12. mysql> desc persons;
  13. +-----------+--------------+------+-----+---------+-------+
  14. | Field | Type | Null | Key | Default | Extra |
  15. +-----------+--------------+------+-----+---------+-------+
  16. | id_p | int | NO | | NULL | |
  17. | lastname | varchar(255) | NO |     | NULL |       |
  18. | firstname | varchar(255) | YES | | NULL | |
  19. | address | varchar(255) | YES |     | NULL |       |
  20. | city | varchar(255) | YES | | NULL | |
  21. +-----------+--------------+------+-----+---------+-------+
  22. 5 rows in set (0.00 sec)
复制代码
3. 删除检查约束

语法格式:
  1. ALTER TABLE <表名>
  2. DROP CONSTRAINT <检查约束名>;
复制代码
 删除persons表中的check_ct约束:
  1. alter table persons
  2. drop constraint chk_ct;
复制代码
五. 非空约束——NOT NULL

非空约束是用来约束表中的字段不能为空。在表中某个列的定义后加上关键字NOT NULL作为限定词,来约束该列的取值不能为空。
比方,在学生信息表中,如果不添加学生姓名,那么这条记载是无效的,这种情况下就可以为用户名字段设置非空约束。
1.在创建表时设置非空约束

语法格式:
  1. CREATE TABLE <表名>(
  2.     ...
  3. <字段名> <数据类型> NOT NULL)
  4. ...
  5. );
复制代码
例 创建学生信息表st_info, 指定st_id为主键,学生姓名不能为空:
  1. create table st_info(
  2.     st_id int(10) primary key,
  3.     name varchar(20) not null,
  4.     class varchar(10),
  5.     gender varchar(4),
  6.     age int(2)
  7. );
  8. mysql> desc st_info;
  9. +--------+-------------+------+-----+---------+-------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +--------+-------------+------+-----+---------+-------+
  12. | st_id | int | NO | PRI | NULL | |
  13. | name | varchar(20) | NO |     | NULL |       |
  14. | class  | varchar(10) | YES  | | NULL    | |
  15. | gender | varchar(4) | YES |     | NULL |       |
  16. | age | int | YES | | NULL | |
  17. +--------+-------------+------+-----+---------+-------+
  18. 5 rows in set (0.00 sec)
复制代码
2. 在修改表时添加非空约束:

如果在创建表的时候忘记了为字段设置非空约束,可以通过修改表举行非空约束的添加。
语法格式:
  1. ALTER TABLE <表名>
  2. CHANGE COLUMN <字段名>
  3. <字段名> <数据类型> NOT NULL;
复制代码
 修改学生信息表st_info中class字段,设置成非空约束:
  1. mysql> alter table st_info
  2.     -> change column class
  3.     -> class varchar(20) not null;
  4. Query OK, 0 rows affected (0.06 sec)
  5. Records: 0  Duplicates: 0  Warnings: 0
  6. mysql> desc st_info;
  7. +--------+-------------+------+-----+---------+-------+
  8. | Field | Type | Null | Key | Default | Extra |
  9. +--------+-------------+------+-----+---------+-------+
  10. | st_id | int | NO | PRI | NULL | |
  11. | name | varchar(20) | NO |     | NULL |       |
  12. | class  | varchar(20) | NO   | | NULL    | |
  13. | gender | varchar(4) | YES |     | NULL |       |
  14. | age | int | YES | | NULL | |
  15. +--------+-------------+------+-----+---------+-------+
  16. 5 rows in set (0.00 sec)
复制代码
3. 删除非空约束

可以在修改语句中对非空约束举行删除。
语法格式:
  1. ALTER TABLE <数据表名>
  2. CHANGE COLUMN <字段名>
  3. <字段名> <数据类型> NULL;
复制代码
 修改学生信息表st_info,将class字段的非空约束删除:
  1. mysql> alter table st_info
  2.     -> change column class
  3.     -> class varchar(20) null;
  4. Query OK, 0 rows affected (0.04 sec)
  5. Records: 0  Duplicates: 0  Warnings: 0
  6. mysql> desc st_info;
  7. +--------+-------------+------+-----+---------+-------+
  8. | Field | Type | Null | Key | Default | Extra |
  9. +--------+-------------+------+-----+---------+-------+
  10. | st_id | int | NO | PRI | NULL | |
  11. | name | varchar(20) | NO |     | NULL |       |
  12. | class  | varchar(20) | YES  | | NULL    | |
  13. | gender | varchar(4) | YES |     | NULL |       |
  14. | age | int | YES | | NULL | |
  15. +--------+-------------+------+-----+---------+-------+
  16. 5 rows in set (0.00 sec)
复制代码
六. 默认值约束——DEFAULT


默认值约束是当数据表中某个字段不输入值的时候,主动为其添加一个已经设置好的值。
比方,在注册学生信息时,如果不输入学生的性别,那么会默认设置一个性别大概输入一个“未知”。
默认值约束一样平常是用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。
1.在创建表时设置默认值约束

语法格式:
  1. CREATE TABLE <表名>(
  2.     ...
  3. <字段名> <数据类型> DEFAULT <默认值>
  4.     ...
  5. );
复制代码
 创建学生信息表st_info,设置年龄age默认值为18:
  1. create table st_info(
  2.     st_id int(10) primary key,
  3.     name varchar(20) not null,
  4.     class varchar(10),
  5.     gender varchar(4),
  6.     age int(2) default 18
  7. );
  8. mysql> desc st_info;
  9. +--------+-------------+------+-----+---------+-------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +--------+-------------+------+-----+---------+-------+
  12. | st_id | int | NO | PRI | NULL | |
  13. | name | varchar(20) | NO |     | NULL |       |
  14. | class  | varchar(10) | YES  | | NULL    | |
  15. | gender | varchar(4) | YES |     | NULL |       |
  16. | age | int | YES | | 18      | |
  17. +--------+-------------+------+-----+---------+-------+
  18. 5 rows in set (0.01 sec)
复制代码
2. 在修改表时添加默认值约束

语法格式:
  1. ALTER TABLE <数据表名>
  2. CHANGE COLUMN <字段名>
  3. <字段名> <数据类型> DEFAULT <默认值>;
复制代码
 修改学生信息表st_info,将性别设置默认值为“保密”:
  1. mysql> alter table st_info
  2.     -> change column gender
  3.     -> gender varchar(4) default '保密';
  4. Query OK, 0 rows affected (0.02 sec)
  5. Records: 0  Duplicates: 0  Warnings: 0
  6. mysql> desc st_info;
  7. +--------+-------------+------+-----+---------+-------+
  8. | Field | Type | Null | Key | Default | Extra |
  9. +--------+-------------+------+-----+---------+-------+
  10. | st_id | int | NO | PRI | NULL | |
  11. | name | varchar(20) | NO |     | NULL |       |
  12. | class  | varchar(10) | YES  | | NULL    | |
  13. | gender | varchar(4) | YES |     | 保密 |       |
  14. | age | int | YES | | 18      | |
  15. +--------+-------------+------+-----+---------+-------+
  16. 5 rows in set (0.00 sec)
复制代码
需要注意的是,这里的gender字段为字符串型数据,需要加上引号。

3. 删除默认值

删除默认值即为将默认值设置为空(null)
语法格式:
  1. ALTER TABLE <数据表名>
  2. CHANGE COLUMN <字段名>
  3. <字段名> <数据类型> DEFAULT NULL;
复制代码
 修改学生信息表st_info, 将gender性别字段的默认值删撤消:
  1. mysql> alter table st_info
  2.     -> change column gender
  3.     -> gender varchar(4) default null;
  4. Query OK, 0 rows affected (0.01 sec)
  5. Records: 0  Duplicates: 0  Warnings: 0
  6. mysql> desc st_info;
  7. +--------+-------------+------+-----+---------+-------+
  8. | Field | Type | Null | Key | Default | Extra |
  9. +--------+-------------+------+-----+---------+-------+
  10. | st_id | int | NO | PRI | NULL | |
  11. | name | varchar(20) | NO |     | NULL |       |
  12. | class  | varchar(10) | YES  | | NULL    | |
  13. | gender | varchar(4) | YES |     | NULL |       |
  14. | age | int | YES | | 18      | |
  15. +--------+-------------+------+-----+---------+-------+
  16. 5 rows in set (0.00 sec)
复制代码
以上6个约束都很重要,而且有的可以联合利用,并不是都是单独利用的。作为底子知识点,会让你的数据库更加规范,从而提高工作服从。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表