• ⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....


    在这里插入图片描述

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
    个人主页:.29.的博客
    学习社区:进去逛一逛~

    在这里插入图片描述


    ⑦【MySQL】约束条件


    1. 约束的基本使用

    约束

    • 什么是约束?

      • 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
    • 约束的作用:

      • 保证数据库中数据的正确性、有效性和完整性。
    • 约束分类:

      • 非空约束 —— 限制该字段的数据不能为null

        • NOT NULL
          
          • 1
      • 唯一约束 —— 保证该字段的所有数据都是唯一、不重复的

        • UNIQUE
          
          • 1
      • 主键约束—— 主键是一行数据的唯一标识,要求非空且唯一

        • PRIMARY KEY
          
          • 1
      • 默认约束—— 保存数据时,未指定该字段的值,则采用默认值

        • DEFAULT
          
          • 1
      • 检查约束(8.0.16版本之后)—— 保证字段满足某一条件

        • CHECK
          
          • 1
      • 外键约束—— 用来让两证表的数据之间建立连接,保证数据的一致性和完整性

        • FOREIGN KEY
          
          • 1
      • ⑦自增约束

        • AUTO_INCREMENT
          
          • 1
    • -- 案例
      
      /*
      创建表
      ID唯一标识:id、int、主键且自增
      姓名:name、varchar(10)、不为空且唯一
      年龄:age、int、大于0且小于等于120
      状态:status、char(1)、默认值为1
      性别:gender、char(1)、无约束条件
      */
      CREATE TABLE test(
        id INT COMMENT 'id唯一标识' PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10) COMMENT '姓名' UNIQUE NOT NULL,
        age INT COMMENT '年龄' CHECK(age BETWEEN 1 AND 120),
        STATUS CHAR(1) COMMENT '状态' DEFAULT 1,
        gender CHAR(1) COMMENT '性别'
      );
      
      -- 查看表结构
      DESC test;
      
      
      -- 向表中插入数据,自增字段可以不指定,会按123...n顺序自动填充
      INSERT INTO test(NAME,age,STATUS,gender) VALUES
      ('小一',18,'1','男');
      
      -- 当设置唯一约束的字段name插入不唯一数据时,会报错:
      -- 错误代码: 1062 Duplicate entry '小一' for key 'test.name'
      INSERT INTO test(NAME,age,STATUS,gender) VALUES
      ('小一',22,'1','女');
      
      -- 当设置非空约束的字段name插入null值,会报错:
      -- 错误代码: 1048 Column 'name' cannot be null
      INSERT INTO test(NAME,age,STATUS,gender) VALUES
      (NULL,22,'1','女');
      
      -- 当设置了检查约束的age字段,插入不符合检查条件的数据,会报错:
      -- 错误代码: 3819 Check constraint 'test_chk_1' is violated.
      INSERT INTO test(NAME,age,STATUS,gender) VALUES
      ('小二',-1,'1','女');
      
      -- 当插入数据时,没有为默认约束字段status设置值,会自动设置默认值1
      INSERT INTO test(NAME,age,gender) VALUES
      ('小三',66,'女');
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44



    2. 外键约束

    如何添加外键约束?

    • 方式一(在创建表时指定外键约束)

    • CREATE TABLE 表名(
      	字段名 数据类型,
          ...
          [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
      );
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 方式二(在修改表时添加外键约束)

    • ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名); 
      
      • 1

    外键的删除/更新行为

    • NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与RESTRICT行为一致)

    • RESTRICT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与NO ACTION行为一致)

    • CASCADE:在父表进行更新/删除时,首先检查记录是否存在外键,存在则同时对外键关联的子表进行相应的更新/删除

    • SET NULL:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为null(前提是外键关联字段可以为null)

    • SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb不支持)

    • 添加外键约束时指定更新行为

    • ALTER TABLE 表名 ADD 
      CONSTRAINT 外键名称 
      FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
      ON UPDATE CASCADE ON DELETE CASCADE;
      -- 将更新行为设定为:CASCADE、将删除行为设定为:CASCADE。
      -- 指定何种更新/删除行为以实际为准,这里提供设定为CASCADE(方式二)的参考。
      -- 除了在修改表时添加外键约束并设定更新/删除行为,还可以在新增表时(方式一)添加并设置。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7




    在这里插入图片描述

  • 相关阅读:
    BufferCache与PageCache
    【单片机仿真】(四)寻址方式 — 寄存器寻址与直接寻址
    【Git】git commit -m 提交信息约束规范
    PHP代码审计入门-DVWA靶场暴力破解篇
    RabbitMQ之Queue(队列)属性解读
    安装PLC1.9.1其它版本号Python3.6+PCL1.9.1+VS2017+gtkbundle_3.6.4版本
    C++对象模型(8)-- 数据语义学:this指针
    一文全面了解低代码
    MATLAB算法实战应用案例精讲-【数据分析】数据仓库-数据治理
    小白买电脑看哪些配置?
  • 原文地址:https://blog.csdn.net/ebb29bbe/article/details/134390632