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版本中可以使用,所以只需要稍微一演示即可。

当我在表中插入数据时

相关推荐
一棵星16 分钟前
内网 MySQL 表结构一键导出 Word 文档:直连 + Agent 双模式实战
数据库·mysql·word
向日的葵00642 分钟前
Redis会话机制vsJWT机制深度解析
数据库·redis·python·缓存·系统架构·jwt
bosins1 小时前
如何配置SQL Server数据库定时自动备份
数据库
烟雨归来1 小时前
RAC数据库OS进程消失,GV$SESSION长期残留KILLED僵尸会话处理
数据库·oracle
小龙报2 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
宇宙第一小趴菜2 小时前
六、Oracle 目录结构
数据库·oracle
IvorySQL2 小时前
PG 日报|修复高 IO 并发场景,解决预读机制耗尽本地缓冲区缺陷
数据库·人工智能·sql·postgresql·区块链
IT小盘2 小时前
08-FastAPI加MySQL实现AI对话记录持久化
android·mysql·fastapi
TiDB 社区干货传送门2 小时前
TiDB 8.5.7 发版|六项实用功能上线
数据库·mysql·tidb
在繁华处2 小时前
MySQL 学习笔记 01:从概念到约束,搭好库表骨架
数据库·oracle