MySQL 约束

275 阅读3分钟

约束

约束,就是通过对数据表中的字段设置一些规则条件,加以限制,可以保证数据库中数据的正确性、有效性和完整性

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 字段的值会默认填充:

image-20230427212147330

当 username 字段值出现重复时,唯一性约束会报错:

image-20230427212257178

当设置 age 字段的值超过限制的 0~150时,检查约束会报错:

image-20230427212411631

总结

本文介绍了 MySQL 数据库中常用的六种约束,包括主键约束,非空约束,唯一性约束,默认约束,外键约束,以及 MySQL 8版本新增的检查约束。通过设置约束,可以保证数据库中的数据的完整性和正确性。