MYSQL--约束

(一).约束的概念

数据库约束是关系数据库的一个重要功能

主要作用是保证数据的完整性,也可以理解数据的正确性(数据本身是否正确,关联关系是否正确)

在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮助我们做校验工作。

注意:约束一般是指定在列上的

(二).约束的类型

1.NOT NULL

指定某列不能存储为NULL值

上面是我创建的一个学生表1,同时id和name字段都没有使用NOT NULL 进行约束

也就是说,在id和name字段中是可以插入NULL值的

如果想要把某一列设置为一个必填项,那么就可以使用NOT NULL (非空) 约束

此时再往里插入数据

可以看到,name列可以为空,因为我没有对name列进行NOT NULL约束

当在id字段写入NULL的时候就会报错

可以插入完整的数据

2.UNIQUE

保证某列的每行必须有唯一的值,即某列的值在整个列中不能重复

可以看到,在当前表中,会存在编号一样的情况

如果想要避免这种情况,我们可以对id字段使用unique约束

当我在表中插入数据的时候

但是插入NULL的时候可以重复插入

3.DEFAULT

规定没有给列赋值时的默认值

此时,当我插入数据的时候,只给id字段提供值时,那么name字段就默认为null

如果想要自定义默认值,就可以使用DEFAULT约束

当我们插入数据的时候

4.PRIMARY KEY

PRIMARY KEY为 NOT NULL 和 UNIQUE的结合,确保某列(或两个列以上的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

我们可以使用NOT NULL 和 UNIQUE来来创建表

同样我们可以直接在定义表的时候,就将id字段设置为主键

当我们在里面插入数据的时候

主键约束帮助我们校验了非空和唯一,这两个校验在写入数据时,对效率有一定的影响,但是这个效率损耗是可以接受的

5.auto_increment

对于整数类型的主键,当插入数据不给主键赋值的时候,数据库会直接读取当前表的自增计数器值,将其赋值新纪录的主键,随后立即把自增计数器的值+1

当在表中插入数据时

同样,我们也可以自定义主键值,只要主键值不重复即可

6.复合主键

一个表中只能包含一个主键,不能包含两个及以上的主键,但是一个主键可以包含多个列

但是一个主键可以包含多个列

当我们在里面插入数据的时候

7.FOREIGN KEY

外键,保证一个表中的数据匹配另一个表中的值的参照完整性

语法:FOREIGN KEY (字段名) REFERENCES 主表(列)

通过一个例子来看

此时,我想要这两张表建立联系,即学生表的 "class_id"正好对应的时班级表中的 "id"值,那么我们就需要是一个外键来建立联系

外键:表中的某个列的值,必须是另一张表中的主键值,或是唯一约束列的值,即当前表中的值在另一张表中必须存在,且另一张表中满足是主键或是唯一约束键。

此时,插入 "class_id" 为5的学生的时候,是可以插入的

下面我们创建一个具有外键关系的 "班级" 表 和 "学生" 表

当我再写入 "王二麻" 的时候,发现报错了

通过外键的约束,可以保证数据的完整性和关系的正确性

删除主表中的数据

当我要删除 "class"表中的数据时,我们发现报错

下面是正确的删除步骤

8.CHECK

保证列中的值符合指定的条件,对于MYSQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。CHECK在5.7版本中不能使用,在8.0版本中可以使用,所以只需要稍微一演示即可。

当我在表中插入数据时

相关推荐
倔强的石头_12 小时前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库
SelectDB14 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
jiayou642 天前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE3 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr3 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
唐青枫4 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
吃糖的小孩4 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
小满8784 天前
5.Mysql事务隔离级别与锁机制
mysql
笃行3505 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3505 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库