一、检查约束(Check Constraint)
1、定义
检查(
CHECK
)约束指定某列中的值必须满足布尔表达式,根据用户自己的需求来进行限制,在MySQL 8.0.16之前,
CREATE TABLE
只允许以下限制版本的表CHECK
约束语法,该语法被解析并被忽略,也就是说在MySQL 8.0.16之前,不支持检查约束
2、语法格式
- 行级添加
CREATE TABLE 表名 ( CHECK (列1 != 列2), 列1 数据类型 CHECK (表达式), 列2 数据类型 CONSTRAINT 唯一约束名 CHECK (表达式) [NOT ENFORCED] ); -- 表达式中包含该列名: 列1 > 0 -- 表达式注意事项 1.允许使用文字,内置函数和运算符 2.不允许在使用了 `AUTO_INCREMENT` 的列上使用 3.不允许存储函数和用户定义的函数 4.不允许子查询等 -- 如果省略或指定为ENFORCED,则创建并强制执行约束。 -- 如果指定为NOT ENFORCED,则创建约束但不强制执行。
- 表级添加
CREATE TABLE TB_CHECK ( 列名 数据类型, 列名 数据类型, [CONSTRAINT 检查约束名] CHECK(布尔表达式) [ NOT ENFORCED] );
- 创建表之后添加
ALTER TABLE 表名 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
- 删除约束
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
3、示例代码
- 在行级别添加
CREATE TABLE tb_check ( id int AUTO_INCREMENT PRIMARY KEY , username VARCHAR(32), phone VARCHAR(11) CHECK(LENGTH(phone) =11) );
- 在表级添加
CREATE TABLE tb_check ( id int AUTO_INCREMENT PRIMARY KEY , username VARCHAR(32), phone VARCHAR(20), CONSTRAINT ck_check_phone CHECK(LENGTH(phone)=20) );
- 在创建表之后添加
ALTER TABLE tb_check ADD CONSTRAINT ck_check_phone CHECK (length(phone) = 20);
二、空值约束(Not Null Constraint)
1、说明
- 一种是限制为null(意义不大),一般是将值限制为Not Null
- NOT NULL只能在列级定义
2、作用:
使指定的列必须插入值
3、语法格式
- 格式
CREATE TABLE 表名 ( 列名 数据类型 null/not null, ... );
4、示例代码
- 不允许为null
CREATE TABLE TB_NULL( USER_ID INT(10) PRIMARY KEY, USERNAME VARCHAR(64) NOT NULL );
三、默认约束(Default Counstraint)
1、定义
- 当不插入值的时候给默认效果
- 用的使modify 来进行修改
2、语法格式
- 格式
DEFAULT 默认值
3、示例代码
- 给列添加默认值
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() )
四、注意事项
- NOT NULL约束和DEFAULT约束只能被创建为列级约束
- 其他4种则既可以被创建为列级约束,也可以被创建为表级约束
- 当一个约束涉及到多列时,只能被创建成表级约束
- 可以为其他4种约束起名,而不能给NOT NULL和DEFAULT约束起名