MySQL 6:数据库约束
2026/7/26 11:35:32 网站建设 项目流程

1.概念与类型

概念:数据库约束是指对数据库表中的数据施加的规则或条件,用于确保数据的准确性和可靠性。这些约束可以是基于数据类型、值范围、唯一性、非空等规则,以确保数据的正确性和相容性。


约束类型

2.NOT NULL 非空约束

定义表时某列不允许为NULL时,可以为列添加非空约束

对于明确不会为空的列,建议主动添加该约束,这不仅保障数据完整性,也能优化查询效率。

举例:创建一个学生表,约束学生名的列不能为NULL。

所有列添加非空约束

由于name列有非空约束,插入NULL值时报错。

正常值可以成功插入

drop table if exists student; create table student( id bigint, name varchar(20) not null );

NULL列为NO表示值不允许为NULL,YES表示值可以为NULL。

查看表结构,name列Null 属性值NO


3.DEFAULT 默认值约束

DEFAULT 约束用于向列中插入默认值,如果没有为列设置值,那么会将默认值设置到该列

举例:为年龄列加入默认

重构学生表,新增年龄列,年龄列加入默认约束

插入一条记录,不指定年龄的值时列使用了默认值(若没有设置默认约束时会为NULL)。

drop table student; create table student ( id bigint, name varchar(20) not null, age int default 18 );

查看表结构ageDefault 属性值18


4.UNIQUE 唯一约束

指定了唯一约束的列该列的值在所有记录中不能重复,比如⼀个人的身份证号学生的学号等。

对于明确是唯一的列,建议主动添加该约束,这不仅保障数据完整性,也能优化查询效率。

注意:唯一约束只确保非 NULL 值的唯一性,通常允许存在多个 NULL

举例:设置学号唯一

重构学生表,新增学号列并设置唯一约束。

插入重复的学号时报错唯一约束生效

drop table student; create table student ( id bigint, name varchar(20) not null, age int default 18, sno varchar(10) unique );

查看表结构sno列Key 属性值UNI表示该学号列成功添加唯一约束


5.PRIMARY KEY 主键约束

5.1定义



5.2示例

举例:将学生表的id 列设为主键

重构学生表,为id添加主键约束

查看表结构,id列Key 属性值PRI,表示id已被成功设为主键

drop table student; create table student ( id bigint primary key, name varchar(20) );

Id列的重复时会发生主键冲突



通常把主键列设置为自动增长,让数据库维护主键值一个表只能有一个自增列

重构学生表,将学生表的id 列设为自增主键

插入数据时,设置主键列的值为NULL不设置主键列的值(推荐主键列的值都会自动生成

drop table student; create table student ( id bigint primary key auto_increment, name varchar(20), age int );

查看表结构,id列Extra 属性值auto_increment表示自增


如果某条记录写入失败生成的主键值将会作废

由于id 重复,产生了唯一冲突,导致插入失败,ID为3主键值作废

修改 id 后成功插入数据,查询后发现新记录 id 列的值为4


主键值可以不连续,手动指定⼀个值,下一次自增从主键最大值开始。

当然也可以手动指定中间的值,但是下一次自增仍从主键最大值开始。


主键或唯一键冲突更新操作


替换,如果存在冲突替换不存在冲突插入


一个只能有一个主键


一个主键可以包含多个列

复合主键,由多个列共同组成的主键,主键是否冲突多个列的组成进行判定。


6.FOREIGN KEY 外键约束


举例:

创建班级表(主表),并初始化数据

重构学生表(从表),加入外键约束

create table class ( id bigint primary key auto_increment, name varchar(20) not null );
# 创建外键约束 class_id bigint, foreign key (class_id) references class(id)


查看表结构,class_id列Key 属性值MUL表示该列已成功添加外键约束



正常向从表插入数据,班级编号在主表存在,插入成功。


插入班级Id为NULL的记录,可以成功,表示当前学生还没有分配班级



删除主表前,先处理依赖关系,可选择删除从表解除所有外键约束清空从表数据

解除所有外键约束

清除从表数据


7.CHECK 约束



需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询