约束
约束,就是通过对数据表中的字段设置一些规则条件,加以限制,可以保证数据库中数据的正确性、有效性和完整性。
MySQL 中的约束主要有以下六种:
| 约束 | 关键字 | 描述 |
|---|---|---|
| 主键约束 | PRIMARY KEY | 主键是一条记录的唯一标识,要求非空且唯一 |
| 非空约束 | NOT NULL | 限制该字段的数据不能为 null |
| 唯一性约束 | UNIQUE | 保证该字段的所有数据都是唯一、不重复的,但默认允许为 null |
| 默认约束 | DEFAULT | 保存数据时,如果未指定该字段的值,则采用默认值 |
| 外键约束 | FOREIGN KEY | 在具有关系的多张表之间建立连接,保证数据的一致性和完整性 |
| 检查约束 | CHECK | 保证字段值满足某一个条件 |
对于设置了唯一性约束的字段,如果没有设置非空约束 ,那么该字段的值是可以设为 null 值,即使多个字段的值都为 null,也是允许的。但同时应用了唯一性约束和非空约束,则此字段的值就不再允许设为 null。
外键约束,是在具有关联关系的表之间建立一种联系,在多表连接时会用到。
检查约束是 MySQL 8.0.16 版本新增的一种约束,在插入和更新操作之前,会检查字段值是否满足设定的条件。
在创建数据表和修改表结构时,可以在字段后面加上上面列举的一种或多种约束,通常加载字段类型后面:
字段名 字段类型 约束1 约束2 ...
比如,创建一张用户表:
CREATE TABLE user(
# 表结构的第一个字段用来定义主键,通常命名为 id;AUTO_INCREMENT 用于主键自动增长
id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一标识',
# 用户名设为非空约束和唯一性约束,则该字段不能设为 null,也不能和其他记录的值重复
username varchar(10) NOT NULL UNIQUE COMMENT '用户名' ,
# 检查年龄字段的值是否大于0,小于150
age int check (age > 0 && age <= 150) COMMENT '年龄' ,
# 默认约束,设置用户性别默认为男
gender char(1) default '男' COMMENT '性别'
);
使用命令行或者图形化工具,执行上面的建表语句,然后向表插入一些数据来验证约束是否生效。
当新增一条记录时,gender 字段的值会默认填充:
当 username 字段值出现重复时,唯一性约束会报错:
当设置 age 字段的值超过限制的 0~150时,检查约束会报错:
总结
本文介绍了 MySQL 数据库中常用的六种约束,包括主键约束,非空约束,唯一性约束,默认约束,外键约束,以及 MySQL 8版本新增的检查约束。通过设置约束,可以保证数据库中的数据的完整性和正确性。