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

当我在表中插入数据时

相关推荐
Riden刘1 小时前
SQL里怎么存变量?怎么优雅处理递归?不妨了解下CTE!
数据库·sql
2401_873204652 小时前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python
阿蒙Amon2 小时前
C#常用类库-详解JetBrains.Annotations
前端·数据库·c#
m0_716667072 小时前
工具、测试与部署
jvm·数据库·python
2501_945424802 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
内网渗透2 小时前
Komari 部署教程:无数据库、单文件、Docker 一键启动的监控工具
数据库·docker·容器·内网穿透·cpolar·远程办公·komari
新猿易码2 小时前
Docker 安装 MySQL 5.7.44(Mac M4 适配版)
mysql·docker
未来龙皇小蓝2 小时前
【MySQL-索引调优】08:模糊查询与索引
数据库·mysql·性能优化
项目工程打工马2 小时前
Ubuntu 上 MySQL 详细安装指南
mysql·ubuntu·adb
数据知道2 小时前
《深入掌握MongoDB数据库》 - 专栏介绍和目录
网络·数据库·mongodb