问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL数据库约束详解:从基础概念到实战应用

创作时间:
作者:
@小白创作中心

MySQL数据库约束详解:从基础概念到实战应用

引用
CSDN
1.
https://blog.csdn.net/zhakakqns/article/details/145543884

数据库约束是用于强制数据完整性的重要规则,包括主键、外键、唯一、非空、检查等类型。通过这些约束,可以确保数据的有效性和关系的正确性。本文将详细介绍MySQL数据库中各种约束类型及其使用方法。

一、什么是数据库约束?

数据库约束是用于强制数据完整性的规则,包括:主键(唯一标识)、外键(关联其他表)、唯一(禁止重复)、非空(值必填)、检查(符合条件)等,确保数据有效且关系正确。

二、约束类型

三、NOT NULL非空约束

定义:定义表示,若某些列不允许为空,就可以为列添加非空约束。

示例:

比如创建⼀个学生表,学生名为NULL时,这条记录是不完整的 :

我们可以通过将name字段设置为非空约束来解决:

四、DEFAULT默认值约束

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

示例:

重构学生表,新增年龄列:

五、UNIQUE唯一约束

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

示例:

重构学生表,新增学号列:

六、PRIMARY KEY主键约束

定义:主键约束唯一标识数据库表中的每条记录

主键必须包含唯一的值,且不能包含 NULL 值。

每个表只能有一个主键,可以由单个列多个列组成。

通常为每张表都指定一个主键,主键列建议使用BIGINT类型

示例:

(一)基础用法

重构学生表,为id列添加非空和唯一约束:

查看表结构,添加非空唯一约束之后key列为PRI(主键):

当id列相同时触发主键冲突:

通常将主键列设置为自增长,让数据库维护主键值:

插入数据时不必设置主键列的值:

查看表结构,Extra列显示auto_increment 表示自增 :

如果数据行写入失败(如语法错误),新生成的主键值作废

主键值可以不连续,且下次自增从主键最大值开始:

(二)其它情况

<1>主键或唯一键冲突时的更新操作:

语法:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

(如已有id为100,下次通过这个id产生冲突时,会将id为100的数据行进行跟新)

示例:

插入ID为100,学号为100100的学生记录时,报主键冲突:

可以使用以上语法,如果插⼊时有冲突则更新当前列的值:

<2>替换,如果存在冲突则替换,不存在冲突则插入

语法:

其实就是将插入语句的insert改为replace

示例:

写入或更新id为101的记录(101记录存在,更新值):

写入或更新id为102的记录(102记录不存在,直接插入):

<3>一个表中不能有多个主键

<4>复合主键:由多个列共同组成的主键,主键是否冲突以多个列的组成进行判定

重构学生表并设置符合主键:

插入两个相同数据:

修改插入的第二个数据的任意一列即可插入成功:

七、FOREIGN KEY外键约束

定义:

外键用于定义主表和从表之间的关系

外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束

当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null

语法:foreign key从表字段 references主表字段

示例:

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

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

查看表结构,Key列的值为MUL表示外键约束的列:

正常插入数据:

再次向student插入一条数据,班级编号为100:

向student中插入一条数据,id为null:

分别删除class表中id为5和2的两条数据:

八、CHECK约束

定义:可以应用于⼀个或多个列,用于限制列中可接受的数据值,从而确保数据的完整性和准确性。

语法:check(条件)

示例:

重构学生表,要求年龄不小于60,性别只能是男或女:

创建新表,c1的值不能为0,c2的值必须大于0,c3的值不小于c2:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号