19、MySQL约束(检查,非空,默认)

一、检查约束(Check Constraint)

1、定义

检查(CHECK)约束指定某列中的值必须满足布尔表达式,根据用户自己的需求来进行限制,

在MySQL 8.0.16之前,CREATE TABLE只允许以下限制版本的表CHECK约束语法,该语法被解析并被忽略,也就是说在MySQL 8.0.16之前,不支持检查约束

2、语法格式

  1. 行级添加
    CREATE TABLE 表名
    (
      CHECK (列1 != 列2),
      列1 数据类型 CHECK (表达式),
      列2 数据类型 CONSTRAINT 唯一约束名 CHECK (表达式) [NOT ENFORCED]
    );
    -- 表达式中包含该列名: 列1 > 0
    -- 表达式注意事项
    1.允许使用文字,内置函数和运算符
    2.不允许在使用了 `AUTO_INCREMENT` 的列上使用
    3.不允许存储函数和用户定义的函数
    4.不允许子查询等
    -- 如果省略或指定为ENFORCED,则创建并强制执行约束。
    -- 如果指定为NOT ENFORCED,则创建约束但不强制执行。
    
  2. 表级添加
    CREATE TABLE TB_CHECK
    (
        列名 数据类型,
        列名 数据类型,
        [CONSTRAINT 检查约束名] CHECK(布尔表达式) [ NOT ENFORCED]
    );
    
  3. 创建表之后添加
    ALTER TABLE 表名 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
    
  4. 删除约束
    ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
    

3、示例代码

  1. 在行级别添加
    CREATE TABLE tb_check
    (
      id int AUTO_INCREMENT PRIMARY KEY ,
      username VARCHAR(32),
      phone  VARCHAR(11) CHECK(LENGTH(phone) =11)
    );
    
  2. 在表级添加
    CREATE TABLE tb_check
    (
      id int AUTO_INCREMENT PRIMARY KEY ,
      username VARCHAR(32),
      phone  VARCHAR(20),
      CONSTRAINT ck_check_phone CHECK(LENGTH(phone)=20)
    );
    
  3. 在创建表之后添加
    ALTER TABLE tb_check
        ADD CONSTRAINT ck_check_phone CHECK (length(phone) = 20);
    

二、空值约束(Not Null Constraint)

1、说明

  1. 一种是限制为null(意义不大),一般是将值限制为Not Null
  2. NOT NULL只能在列级定义

2、作用:

使指定的列必须插入值

3、语法格式

  1. 格式
    CREATE TABLE 表名
    (
        列名 数据类型 null/not null,
        ...
    );
    

4、示例代码

  1. 不允许为null
    CREATE TABLE TB_NULL(
        USER_ID INT(10) PRIMARY KEY,
        USERNAME VARCHAR(64) NOT NULL
    );
    

三、默认约束(Default Counstraint)

1、定义

  1. 当不插入值的时候给默认效果
  2. 用的使modify 来进行修改

2、语法格式

  1. 格式
    DEFAULT 默认值
    

3、示例代码

  1. 给列添加默认值
    CREATE TABLE tb_default
    (
        user_id     INT(10) PRIMARY KEY AUTO_INCREMENT,
        username    VARCHAR(32) NOT NULL,
        phone       VARCHAR(11) CHECK (LENGTH(PHONE) = 11),
        sex         INT(2) DEFAULT 0,
        create_time datetime DEFAULT NOW()
    )
    

四、注意事项

  1. NOT NULL约束和DEFAULT约束只能被创建为列级约束
  2. 其他4种则既可以被创建为列级约束,也可以被创建为表级约束
  3. 当一个约束涉及到多列时,只能被创建成表级约束
  4. 可以为其他4种约束起名,而不能给NOT NULL和DEFAULT约束起名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。