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 约束

添加默认值

相关推荐
yuanbenshidiaos几秒前
MYSQL----------数据库优化及锁机制详解
数据库·mysql
长风清留扬7 分钟前
2025年新出炉的MySQL面试题
数据库·sql·mysql·面试
XianxinMao26 分钟前
多模态人工智能在零售业的未来:通过GPT-4 Vision和MongoDB实现智能产品发现
数据库·人工智能·mongodb
移动云开发者联盟43 分钟前
移动云自研云原生数据库入围国采!
数据库·云原生
遥遥远方 近在咫尺1 小时前
MySQL的事务
数据库·mysql
曹二7471 小时前
创建和管理表
数据库·oracle
大哥喝阔落1 小时前
fitz获取pdf内容
服务器·数据库·pdf
三天不学习2 小时前
【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
数据库·后端·c#·.net·orm·sqlsugar
Faxxtty2 小时前
【MySQL】SQL菜鸟教程(二)
数据库·sql·mysql
专注API从业者2 小时前
如何处理获取到的淘宝评论数据以进行有效的商品品控?
大数据·开发语言·数据库·算法