序号 | 系列文章 |
---|---|
1 | 【MySQL】MySQL介绍及安装 |
2 | 【MySQL】MySQL基本操作详解 |
3 | 【MySQL】MySQL基本数据类型 |
4 | 【MySQL】MySQL表的七大约束 |
1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
2.目的:保证数据库中数据的正确、有效性和完整性。
约束 | 描述 | 关键字 |
---|---|---|
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
非空约束 | 限制该字段的数据不能为null | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
自增约束 | 为每条记录生成唯一的标识号 | AUTO_INCREMENT |
检索约束 | 保证字段值满足某一个条件(8.0.16版本之后) | CHECK |
外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
默认约束用于为数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么系统会自动为该字段插入默认值。默认值是通过DEFAULT关键字定义的,基本语法格式为:
字段名 数据类型 DEFAULT 默认值;
知识点:
需要注意的是,BLOB,TEXT数据类型不支持默认约束。
为了能够更好的理解默认约束以及其使用,实例如下:
1,添加默认约束及查看
2,默认约束的数据记录添加
知识点1:为现有的数据表添加默认约束?
alter table 表名称 modify 字段名 数据类型 default 默认值;
知识点2:为现有的数据表删除默认约束?
alter table 表名称 modify 字段名 数据类型;
为了能够更好的理解默认约束地添加和删除,实例如下:
1,默认约束添加删除及查看
非空约束指的是字段的值不能为NULL,在MySQL中,非空约束是通过NOT NULL定义的,其基本语法格式为:
字段名 数据类型 NOT NULL;
知识点:
为了能够更好的理解非空约束以及其注意事项,实例如下:
1,非空约束的添加及查看
2,非空约束的数据记录添加
知识点1:为现有的数据表添加非空约束?
alter table 表名称 modify 字段名 数据类型 not null;
知识点2:为现有的数据表删除非空约束?
#方式1:
alter table 表名称 modify 字段名 数据类型;
#方式2:
alter table 表名称 modify 字段名 数据类型 null;
为了能够更好的理解非空约束地添加和删除,实例如下:
唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。
唯一约束是通过UNIQUE定义的,其基本语法格式为:
#列级约束
字段名 数据类型 UNIQUE;
#表级约束1:
UNIQUE(字段名);
#表级约束2:(复合唯一约束)
UNIQUE(字段名1,字段名2,...)
知识点:
为了能够更好的理解唯一约束以及其使用,实例如下:
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 表名称;
为了能够更好的理解唯一约束的使用,实例如下:
1,唯一约束的添加和删除
2,复合唯一约束的添加和删除
3,查看表的索引值
4,唯一约束使用的注意点
在MySQL中,为了快速查找表中的某条记录,可以通过设置主键来实现。主键可以唯一标识表中的记录,类似于指纹,身份证用于标识人的身份一样。
主键约束通过PRIMARY KEY定义,相当于唯一约束和非空约束的组合,要求被约束字段不允许重复,也不允许出现NULL值,每个表中最多只能有一个主键。
主键约束的创建分为列级和表级两种,其基本语法格式为:
#列级约束
字段名 数据类型 PRIMARY KEY
#表级约束
PRIMARY KEY(字段名1,字段名2,...)
知识点:
为了能够更好的理解主键约束以及其使用,实例如下:
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 字段名 字段类型;
为了能够更好的理解主键约束的上述使用,实例如下:
1,主键约束的添加和删除
2,主键约束使用的注意事项
在为数据表设置主键约束后,每次插入的数据,都需要检查主键的值,防止因出现插入的数据重复,从而导致数据添加失败。
MySQL中,为了应对这种问题,减少不必要的麻烦,提供了自动增长的功能来自动生成主键的值。
#方式1:创建表时添加
字段名 字段类型 AUTO_INCREMENT
#方式2:修改表时添加
alter table 表名称 modify 字段名 字段类型 AUTO_INCREMENT;
知识点:
为了能够更好的理解自增约束以及其使用,实例如下:
1,自增约束的添加
2,自增约束的数据记录添加
3,自动增长值的查看
SHOW CREATE TABLE 表名称\G;
4,自动增长值的修改
ALTER TABLE 表名称 AUTO_INCREMENT = 新的自动增长值;
5,自增约束的删除
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}]
CONSTRAINT symbol表示用于定义外键约束的名称,若省略,系统会自动生成一个名字。
index_name 是可选参数,表示外键索引名称,若省略,系统也会在建立外键时自动创建一个外键索引,加快查询速度
index_col_name1,…表示从表中外键名称列表,而index_col_name2,…表示主键约束或唯一约束字段
ON DELETE用于设置主表中的数据被删除时,从表对应的数据进行相应的处理办法
ON UPDATE用于设置主表中的数据被更新时,从表对应的数据进行相应的处理办法
从表对应的数据处理办法相关的参数:
参数名称 功能描述 RESTRICT 默认值,拒绝绝主表删除或修改外键关联字段 CASCADE 主表中删除或更新记录时,同时自动删除或更新从表中对应的记录 SET NULL 主表中删除或更新记录时,使用NULL值替换从表中对应的记录(不适用于NOT NULL的字段) NO ACTION 与默认值RESTRICT相同,拒绝主表删除或修改外键关联字段 SET DEFAULT 设默认值,但InnoDB目前不支持
注意:
知识点1:外键约束的添加
#添加方式1:创建从表时添加
[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的字段) REFERENCES 主表名(被参考字段)
#添加方式2:修改从表时添加
ALTER TABLE 从表名 ADD[CONSTRAINT <外键约束名称>] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用字段) [on update xx][on delete xx];
为了能够更好的理解外键约束的添加,实例如下:
1,创建主表和从表,即有关联的数据表
2,外键约束的添加
3,外键约束的查看
知识点2:外键约束的删除
alter table 表名称 drop foreign key 外键名;
为了能够更好的理解外键约束的添加,实例如下:
1,外键约束的删除及查看
2,普通索引的删除及查看
知识点3:外键约束的注意事项
这就是本期博客的全部内容啦,想必大家已经对MySQL中的七大约束有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞,评论✍,收藏),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!