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

添加默认值

相关推荐
月光水岸New41 分钟前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山67542 分钟前
数据库基础1
数据库
我爱松子鱼1 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo1 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser2 小时前
【SQL】多表查询案例
数据库·sql
Galeoto2 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)3 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231113 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白3 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码3 小时前
【SQL实验】触发器
数据库·笔记·sql