目录
参考源
- 简单教程
- 菜鸟教程
SQL check 约束
SQL check
约束用于限制列中的值的范围
check
约束既可以用于某一列也可以用于某张表:
- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值
- 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制
示例数据
CREATE DATABASE IF NOT EXISTS hardy_db default character set utf8mb4 collate utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson;
create table 添加 check 约束
创建表结构时可以使用 check
关键字给表或者字段添加 check
约束
-
例如在创建 lession 表时可以给 id 字段加上一个大于 0 的 约束
MySQLCREATE TABLE lesson ( id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(32) default '', views int(11) NOT NULL default '0', created_at DATETIME, CHECK ( id > 0 ) );
SQL Server / Oracle / MS Access
CREATE TABLE lesson ( id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT CHECK ( id>0 ), name varchar(32) default '', views int(11) NOT NULL default '0', created_at DATETIME );
多个字段添加约束
如果想给一个表中多个字段添加约束,直接在check
关键字后的括号内添加,每个约束使用 and
连接
CREATE TABLE lesson (
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name varchar(32) default '',
views int(11) NOT NULL default '0',
created_at DATETIME,
CHECK ( id >0 AND views >= 0 );
);
给 check 约束命名
CREATE TABLE lesson (
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name varchar(32) default '',
views int(11) NOT NULL default '0',
created_at DATETIME,
CONSTRAINT chk_lesson_id CHECK ( id > 0 )
);
alter table 时的 SQL check 约束
ALTER TABLE lesson ADD CHECK (id>0);
命名
ALTER TABLE lesson ADD CONSTRAINT chk_lesson CHECK (id > 0 AND views >= 0);
删除 check 约束
如果想要删除 check
约束,可以使用 alter table ... drop
关键字
SQL Server / Oracle / MS Access
ALTER TABLE lesson DROP CONSTRAINT chk_lesson_id;
MySQL
ALTER TABLE lesson DROP CHECK chk_lesson_id
建议
虽然各个数据库系统都可以添加 check
约束,但不推荐这么做,因为这会影响数据插入和更新的速度