- NOT NULL(列级):非空约束,约束该字段不可为null;
- DEFAULT(列级):默认约束,添加默认值,插入数据时,如果该字段没有值,则会用默认值填充;
- PRIMARY KEY(表级,列级):主键约束,一条记录的唯一标识,不可为空,不可重复
- UNIQUE(表级,列级):唯一约束,不可重复,但可以有一个null;
- FOREIGN KEY(表级):外键约束,用于两张表关联,一个表的外键必定是两一个表的主键或唯一;
- CHECK(表级,列级):检查约束,mysql 不支持,但也不报错,用来校验数据,例如:数据值必须处于某一区间
开发中一般只有前三种约束能用到。mysql 不支持 CHECK,而且校验的逻辑应该放在代码中;由于实际开发中,数据表都是逻辑删除,UNIQUE 会导致添加数据失败的情况,因为某条数据被逻辑删除,但是它的值还在,如果想在添加一条相同数据就无法添加;对于外键,阿里规范名曲指出:
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
说明:以学生和成绩的关系为例,学生表中的 student id 是主键,那么成绩表中的 student id
则为外键。如果更新学生表中的 student id ,同时触发成绩表中的 student id 更新,即为
级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻
塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。
所谓表级,列级是针对语法而言,列级约束在创建表时,可直接写在字段后,表级则需要写在所有字段的后面用 constraint 声明:
CREATE TABLE test_constraint(
id int PRIMARY KEY,
.....
)
CREATE TABLE test_constraint(
id int,
.....
CONSTRAINT pk PRIMARY KEY(id)
)
以上两种分别以列级语法和表级语法声明主键
网友评论