首页 > 数据库 > > 死磕数据库系列(十八):MySQL 表的七大约束
前面我们一起学习了:MySQL 单表、多表操作,今天我将详细的为大家介绍 MySQL 表中的七大约束相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
默认约束用于为数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么系统会自动为该字段插入默认值。默认值是通过DEFAULT关键字定义的,基本语法格式为:
字段名 数据类型 DEFAULT 默认值;
知识点:需要注意的是,BLOB,TEXT数据类型不支持默认约束。
为了能够更好的理解默认约束以及其使用,实例如下:
知识点1:为现有的数据表添加默认约束?
alter table 表名称 modify 字段名 数据类型 default 默认值;
知识点2:为现有的数据表删除默认约束?
alter table 表名称 modify 字段名 数据类型;
为了能够更好的理解默认约束地添加和删除,实例如下:
非空约束指的是字段的值不能为NULL,在MySQL中,非空约束是通过NOT NULL定义的,其基本语法格式为:
字段名 数据类型 NOT NULL;
知识点:
为了能够更好的理解非空约束以及其注意事项,实例如下:
知识点1:为现有的数据表添加非空约束?
alter table 表名称 modify 字段名 数据类型 not null;
知识点2:为现有的数据表删除非空约束?
#方式1:
alter table 表名称 modify 字段名 数据类型;
#方式2:
alter table 表名称 modify 字段名 数据类型 null;
为了能够更好的理解非空约束地添加和删除,实例如下:
约束用于保证数据表中字段的性,即表中字段的值不能重复出现。
约束是通过UNIQUE定义的,其基本语法格式为:
#列级约束
字段名 数据类型 UNIQUE;
#表级约束1:
UNIQUE(字段名);
#表级约束2:(复合约束)
UNIQUE(字段名1,字段名2,...)
知识点:
为了能够更好的理解约束以及其使用,实例如下:

注意:方式3的这种方式添加的约束是复合约束,其是将id,name两个字段组合成一个复合键。
注意:复合键的特点为只有组合成的复合键的字段的相同时才会视为重复记录。
即只有当构成复合键的id,name两个字段同时发生重复时,才会插入失败,其中一个字段发生重复时,可以插入成功。
知识点1:为现有的数据表添加约束?
#方式1:列级方式添加约束
alter table 表名称 modify 字段名 字段类型 unique;
#方式2:表级约束添加约束
alter table 表名称 add unique(字段名);
#方式3:添加复合约束
alter table 表名称 add unique(字段名1,字段名2,...);
知识点2:为现有的数据表删除约束?
alter table 表名称 drop index 字段名;
知识点3:查看添加或删除约束的结果?
#法1:查看表结构
desc 表名称;
#法2:查看表的创建信息
show create table 表名称 \G;
知识点4:查看表的索引?
show index from 表名称;
为了能够更好的理解约束的使用,实例如下:
在MySQL中,为了快速查找表中的某条记录,可以通过设置主键来实现。主键可以标识表中的记录,类似于指纹,身份证用于标识人的身份一样。
主键约束通过PRIMARY KEY定义,相当于约束和非空约束的组合,要求被约束字段不允许重复,也不允许出现NULL值,每个表中多只能有一个主键。
主键约束的创建分为列级和表级两种,其基本语法格式为:
#列级约束
字段名 数据类型 PRIMARY KEY
#表级约束
PRIMARY KEY(字段名1,字段名2,...)
知识点:
为了能够更好的理解主键约束以及其使用,实例如下:
知识点1:复合主键
尽管一个表只能给一个字段添加主键,但可以同时给多个字段添加主键,构成复合主键。
知识点2:为现有的数据表添加主键约束?
#方式1:列级方式添加主键约束
alter table 表名称 modify 字段名 字段类型 primary key;
#方式2:表级约束添加主键约束
alter table 表名称 add primary key(字段名);
#方式3:添加复合主键约束
alter table 表名称 add primary key(字段名1,字段名2,...);
知识点3:为现有的数据表删除主键约束?
#方式1:
alter table 表名称 drop primary key;
#方式2:
alter table 表名称 modify 字段名 字段类型;
为了能够更好的理解主键约束的上述使用,实例如下:
在为数据表设置主键约束后,每次插入的数据,都需要检查主键的值,防止因出现插入的数据重复,从而导致数据添加失败。
MySQL中,为了应对这种问题,减少不必要的麻烦,提供了自动增长的功能来自动生成主键的值。
#方式1:创建表时添加
字段名 字段类型 AUTO_INCREMENT
#方式2:修改表时添加
alter table 表名称 modify 字段名 字段类型 AUTO_INCREMENT;
知识点:
为了能够更好的理解自增约束以及其使用,实例如下:
SHOW CREATE TABLE 表名称\G;
ALTER TABLE 表名称 AUTO_INCREMENT = 新的自动增长值;
ALTER TABLE 表名称 MODIFY 字段名 字段类型;
在MySQL中,为了检查某个字段的值是否符合xx要求,一般指的是值的范围,可以通过设置检索约束来实现。
检索约束的基本语法:
字段名 数据类型 CHECK (条件)
说明:
在 MySQL 5.7 中,CHECK 约束是被忽略的,因此它对数据验证没有任何作用。这意味着,在 MySQL 5.7 中,可以插入不符合 CHECK 约束的数据,而不会有任何错误或警告。
但是,在 MySQL 8.0 中,CHECK 约束是被支持的,并且会对数据进行验证。如果插入的数据不符合 CHECK 约束,则会产生错误。
因此,在使用 CHECK 约束时,应该注意 MySQL 版本的差异。
在MySQL中,为了保证不同表中相同含义数据的一致性和完整性,可为数据表添加外检约束。
外键指的是在一个表中引用另外一个表中的一列或多列,被引用的列应该具有主键约束或性约束,从而保证数据的一致性和完整性。
其中,被引用的表称为主表,引用外键的表称为从表。
例如:员工表的员工所在部门这个字段的值要参考部门表:部门表是主表,员工表是从表。
例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是主表,选课表是从表。
知识点1:外键约束的添加
[CONSTRAINT symbol] FOREIGN KEY[index_name] (index_col_name1,...)
REFERENCES 主表名 (index_col_name2,...)
[ON DELETE{RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT}]
[ON UPDATE{RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT}]
从表对应的数据处理办法相关的参数:
注意:
知识点1:外键约束的添加
#添加方式1:创建从表时添加
[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的字段) REFERENCES 主表名(被参考字段)
#添加方式2:修改从表时添加
ALTER TABLE 从表名 ADD[CONSTRAINT <外键约束名称>] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用字段) [on update xx][on delete xx];
为了能够更好的理解外键约束的添加,实例如下:
知识点2:外键约束的删除
alter table 表名称 drop foreign key 外键名;
为了能够更好的理解外键约束的添加,实例如下:
知识点3:外键约束的注意事项
来源:https://blog.csdn.net/m0_64338546 /article/details/128547998
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3139797/ ,如需转载,请注明出处,否则将追究法律责任。