(一).约束的概念
数据库约束是关系数据库的一个重要功能
主要作用是保证数据的完整性,也可以理解数据的正确性(数据本身是否正确,关联关系是否正确)
在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮助我们做校验工作。
注意:约束一般是指定在列上的
(二).约束的类型
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版本中可以使用,所以只需要稍微一演示即可。

当我在表中插入数据时
