数据表约束:对于某一列的值能添加哪些内容做了一定的限制,这种限制的手段就称为约束。
(一)约束的类型
NOT NULL | 指示某列不能存储 NULL 值。 |
UNIQUE | 保证某列的每行必须有唯一的值。 |
DEFAULT | 规定没有给列赋值时的默认值。 |
PRIMARY KEY | NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。 |
FOREIGN KEY | 保证一个表中的数据匹配另一个表中的值的参照完整性。 |
CHECK | 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。(MySQL8.016版本后才支持check约束) |
(二)非空约束(NOT NULL)
若在某一属性定义时规定该属性 not null ,不能将空值存放在该属性中。
在创建表之后添加非空约束,必须将当前表中要添加非空约束的属性为null的行先删除或者修改为非空。
(三)唯一约束(UNIQUE)
指的是对应字段是唯一的,不能重复。一个表的唯一约束可以有多个
null值不受唯一键的约束
查看唯一约束 show keys from tb_name;
创建表之后想修改某一属性为唯一约束:alter table tb_name add unique(属性名称);
注意:添加前要保证当前表中要添加的属性没有重复值。
(四)默认值约束 (DEFAULT)
规定了默认值的表,在插入数据时若没有指定该列,则使用默认值插入数据
若显示对默认值的列插入null值,不会触发默认值
(五)主键约束(PRIMARY KEY)
1.primary key = unique + not null
在MySQL中,某个属性使用 unique + not null -->默认会将该属性置为主键!(第一个unique + not null),因为一个表中只能有一个主键
(2)主键列的值不能重复,不能为null
(3)删除表中主键
alter table tb_name drop primary key;
(4)创建表之后添加主键 前提:当前表中没有主键约束
alter table tb_name add primary key(作为主键的属性名称);
(4-1)单一主键
(4-2)联合主键 :主键约束可以由多列共同组成
(5)自增主键 auto_increment
一般来说作为主键的列都是int 或者是定长的char 类型,且因为主键不重复且不为空,因此我们可以将主键的增长交给数据库自动执行。
(5-1)自增主键可以显示的插入 null 或者不写,都会触发自增操作
(5-2)自增主键是以当前已经出现过的数字最大值 + 1;
(5-2-1)delete 删除表数据
(5-2-2)truncate删除表数据
truncate 表数据后,插入数据会还原自增主键的值
(5-3)可以显示给自增主键插入一个值
下次触发自增操作时,仍然是以当前出现过的数字最大值作为基准自增
(5-4)插入失败,报错也会使用自增主键
(六)外键约束 (FOREIGN KEY)
外键用于关联其他表,涉及多个表之间的关联约束,语法:
foreign key (当前表中的哪个属性) references 主表(关联属性)
(1)添加时,主表中的关联属性必须存在相应值后才能在从表(当前表)中插入数据。
student表中 class_id关联class表的id属性,student表中插入数据时,属性class_id要能正确插入,class表中的id值必须存在。
(2)删除时,先看从表,从表中外键约束的属性关联的所有记录都删除后才能在执行主表的删除操作。