当前位置: 首页 > article >正文

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

添加默认值


http://www.kler.cn/a/487869.html

相关文章:

  • 高通,联发科(MTK)等手机平台调优汇总
  • leetcode 面试经典 150 题:两数之和
  • oracle位运算、左移右移、标签算法等
  • 【llm/ollama/qwen】在本地部署qwen2.5-coder并在vscode中集成使用代码提示功能
  • MySql根据经纬度查询距离
  • 精度论文:【Coordinate Attention for Efficient Mobile Network Design】
  • 夜话卡尔曼滤波(2) - 变量定义
  • Euler 21.10安装oracle 19.22单机安装
  • C#语言的数据结构
  • python-42-使用selenium-wire爬取微信公众号下的所有文章列表
  • Perl语言的软件开发工具
  • 设计一个利用事务特性可以阻塞线程的排他锁,并且通过注解和 AOP 来实现
  • 【C++/控制台】2048小游戏
  • docker学习笔记-初步接触
  • 广芯电子推出BCT8933/BCT8937S/BCT89317/BCT89318 手机外放解决方案
  • [Transformer] The Structure of GPT, Generative Pretrained Transformer
  • REVERSE-COMPETITION-CCSSSC-2025
  • 朝天椒USB服务器在银泰证券虚拟化超融合场景的应用案例
  • Hadoop集群之间实现免密登录
  • ThinkPHP 8高效构建Web应用-响应处理
  • MyBatis 注解使用指南
  • 关于内网外网,ABC类地址,子网掩码划分
  • 【git】-初始git
  • 机器学习免费使用的数据集及网站链接
  • 获取Telegram的用户IP地址
  • 推荐一个边玩游戏边学编程网站