MySQL_约束

第十三章_ 约束

1.约束的概述

1.1为什么需要约束

为了保证数据的完整性,SQL规范以约束的方式对 表数据进行额外的条件限制.从以下四个方面考虑:

  • 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录

  • 域完整性(Domain Integrity) : 例如: 年龄范围0-120 性别范围 男/女

  • 引用完整性(Referential Integrity) : 例如: 员工所在的部门,在部门表中要找到这个部门

  • 用户自定义完整性(User-defined Integrity) : ;例如 : 用户名唯一,密码不能为空等,本部门经理的工资不得高于本部门职工平均工资的5背

1.2什么是约束

约束时表级的强制规定

1.3 约束的分类

角度1:约束的字段个数

单列约束 vs 多列约束

角度2: 约束的作用范围

列级约束 : 将此约束声明在对应的字段后面

表级约束 : 在表中所有的字段都声明完,在所有字段后面声明的约束

角度3: 约束的作用(或功能)

  • not null ( 非空约束)

  • unique (唯一性约束)

  • primary (主键约束)

  • foreign (外键约束)

  • check (检查约束)

  • default (默认值约束)

1.4 如何添加约束

可以在创建表时规定约束(通过CREATE TABLE 语句),

或者在表创建后通过ALTER TABLE语句规定约束,删除约束

1.5如何查看表中的约束

2.非空约束

用来限制字段不能为空

可以在创建时添加约束

可以在ALTER TABLE时添加约束

可以在ALTER TABLE时删除约束

3.唯一性约束

防止某个字段重复

3.1关键字

unique

可以在创建时添加约束

可以在ALTER TABLE时添加约束

可以在ALTER TABLE时删除约束

null可以重复

3.2 三种添加关键字方式

  • 创建表时,(如上图)
  • 修改表,既可以使用add,也可以使用modify

    • add 和 modify的区别在多个约束中体现,modify如果直接写添加的约束会删除之前的约束

3.3 复合的唯一性约束

合起来唯一就可以

3.4删除唯一性约束

  • 添加唯一性约束的列上也会自动创建唯一索引

  • 删除唯一约束只能通过删除唯一索引的方式删除

  • 删除时需要指定唯一索引名,唯一索引名和唯一约束名一样

  • 如果创建的唯一性约束结束时未指定名称,如果是单列,就默认和列名相同: 如果是组合列,那么默认与组合第一个列名一样

4.PRIMARY KEY约束

4.1作用:

用来唯一标识表中的一行记录

4.2 关键字

复制代码
primary key

4,3 特点

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值

  • 不要修改主键字段的值,如果修改主键的值,就有可能破坏数据的完整性

4.4创建约束

一个表只允许存在一个主键

通常也必须存在一个主键

特征: 非空且唯一,复合型约束都不能为空

正常人不会删除主键约束

5.自增列: AUTO_ONCREMENT

5.1作用

某个字段自增

5.2 关键字

auto_increment

5.3 特点和要求

  1. 一个表只能有一个自增长列

  2. 当需要生产唯一表示符或顺序值时,可设置自增长

  3. 自增长列约束的列必须是键列(主键列, 唯一键列)

  4. 自增约束的列的数据类型必须时整数类型

  5. 如果自增列指定了0和null,就在当最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值

修改主键值不会改变自增计数器的状态。即使手动将某一行的主键值设置为比当前最大值大的值,自增计数器仍然会从之前的最大值继续递增。

6.FOREIGN KEY约束

6.1 作用

限定某个表的某个字段的引用完整性

6.2关键字

FOREIGN KEY

6.3特点

①从表的外键列,必须引用/参考主表的主键或唯一约束的列

因为被依赖/被参考的值必须是唯一的

②在创建外键约束时,如果不给外键约束的话,默认不是列名,耳式自动产生一个外键名,也可以指定外键约束名

③创建表时就指定外键约束的话,先创建主表再创建从表

④删表时,先删从表(或先删除外键约束),再删除主表

⑤当主表的记录被从表参照时,主表的记录将不允许被删除,如果要删除记录,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据

⑥在"从表"中指定外键约束,并且一个表可以建立多个外键约束

⑦从表的外键列与主表被参照的列名字可以不同,但是数据类型必须相同,逻辑意义一样.如果类型不一样,创建子表时,就会出现错误

⑧当创建外键约束时,系统默认会在所在的列上建立对应的索引.但是索引名时列名,不是外键的约束名

⑨删除外键约束后,必须手动删除对应的索引

6.4 约束等级

  • casecade

外键约束最好采用:ON UPDATE CASCADE ON DELETE RESTRICT的方式

7. CHECK约束

7.1 作用

检查某个字段的值是否符合xx要求

7.2关键字

CHECK

7.3 说明: MySQL 5.7不支持

MySQL5.7可以使用,但不起任何作用

但是MySQL8.0中可以使用check约束了

8. default 约束

添加默认值

相关推荐
NPE~9 分钟前
[手写系列]Go手写db — — 第五版(实现数据库操作模块)
开发语言·数据库·后端·golang·教程·手写系列·手写数据库
有想法的py工程师1 小时前
PostgreSQL 测试磁盘性能
数据库·postgresql
2301_797604241 小时前
d41:MyBatisPlus入门,注解,配置,条件构造器,自定义SQL,IService
sql·mybatis
weixin_441455262 小时前
Mysql MVCC
数据库·mysql
Su-RE2 小时前
【ElasticSearch】text 和 keyword 类型区分
java·数据库·elasticsearch
武子康2 小时前
Java-146 深入浅出 MongoDB 数据插入、批量写入、BSON 格式与逻辑查询and or not操作指南
java·开发语言·数据库·sql·mongodb·性能优化·nosql
奥尔特星云大使2 小时前
MySQL快速构建主从(基于GTID)
数据库·mysql·主从复制
小园子的小菜2 小时前
MySQL ORDER BY 深度解析:索引排序规则与关键配置参数阈值
数据库·mysql
wxjlkh2 小时前
Oracle Exadata一体机简介 1千多个W
数据库·oracle
泽虞3 小时前
《Qt应用开发》笔记p3
linux·开发语言·数据库·c++·笔记·qt·面试