为什么需要约束?
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
从以下四个方面考虑:
什么是约束
约束是表级的强制规定。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。
约束的分类
非空约束
关键字 NOT NULL
特点
默认,所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型
非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
一个表可以有很多列都分别限定了非空
空字符串''不等于NULL,0也不等于NULL
添加非空约束
CREATE TABLE 表名称( 字段名 数据类型, 字段名 数据类型 NOT NULL, 字段名 数据类型 NOT NULL);
建表后
alter table 表名称 modify 字段名 数据类型 not null;
删除非空约束
唯一性约束
关键字 UNIQUE
特点
同一个表可以有多个唯一约束。
唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
唯一性约束允许列值为空。在创建唯一约束的时候,
如果不给唯一约束命名,就默认和列名相同。
MySQL会给唯一约束的列上默认创建一个唯一索引。
添加唯一约束
举例:
删除唯一约束
添加唯一性约束的列上也会自动创建唯一索引。
删除唯一约束只能通过删除唯一索引的方式删除。
删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同。也可以自定义唯一性约束名。
PRIMARY KEY 约束
作用 用来唯一标识表中的一行记录。
关键字 primary key
特点
添加主键约束
建表时指定主键约束
建表后增加主键约束
ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); #字段列表可以是一个字段,也可以是多个字段, #如果是多个字段的话,是复合主键
删除主键约束
自增列:AUTO_INCREMENT
作用 某个字段的值自增
关键字 auto_increment
如何指定自增约束
建表后
alter table 表名称 modify 字段名 数据类型 auto_increment;
MySQL 8.0将自增主键的计数器持久化到重做日志中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。
FOREIGN KEY 约束
作用 限定某个表的某个字段的引用完整性。比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。
FOREIGN KEY关键字
主表和从表/父表和子表 主表(父表):被引用的表,被参考的表从表(子表):引用别人的表,参考别人的表
例如:员工表的员工所在部门这个字段的值要参考部门表:部门表是主表,员工表是从表。
例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是主表,选课表是从表。
总结:约束关系是针对双方的添加了外键约束后,主表的修改和删除数据受约束添加了外键约束后,从表的添加和修改数据受约束在从表上建立外键,要求主表必须存在删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除
删除外键约束