二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:SQL CHECK 约束
SQL
CHECK
约束用于限制列中的值的范围
CHECK
约束既可以用于某一列也可以用于某张表:
- 如果对单个列定义
CHECK
约束,那么该列只允许特定的值- 如果对一个表定义
CHECK
约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制演示数据
先在 MySQL 数据库运行下面的语句创建测试数据
CREATE DATABASE IF NOT EXISTS twle default character set utf8mb4 collate utf8mb4_unicode_ci; USE twle; DROP TABLE IF EXISTS `lession`;CREATE TABLE 添加 CHECK 约束
创建表结构时可以使用
CHECK
关键字给表或者字段添加CHECK
约束例如我们在创建
lession
表时可以给id
字段加上一个大于 0 的 约束MySQL
CREATE TABLE `lession` ( 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 `lession` ( 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 `lession` ( 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
约束命名其实我们还可以给一个
CHECK
约束取一个名字例如,我们给
lession
的id
约束取一个名字chk_lession_id
可以使用下面的 SQL 语句CREATE TABLE `lession` ( 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_lession_id CHECK ( id>0 ) );ALTER TABLE 时的 SQL CHECK 约束
如果表已经被创建,我们可以使用
ALTER TABLE ADD CHECK
添加约束例如,我们想给已经创建的表
lession
添加id
大于 0 的约束,可以使用下面的 SQL 语句ALTER TABLE lession ADD CHECK (id>0);如果还想要命名 CHECK 约束,并定义多个列的 CHECK 约束,可以像下面这样定义 SQL 语句
ALTER TABLE lession ADD CONSTRAINT chk_lession CHECK (id>0 AND views >= 0);删除 CHECK 约束
如果想要删除 CHECK 约束,可以使用
ALTER TABLE ... DROP
关键字SQL Server / Oracle / MS Access
ALTER TABLE lession DROP CONSTRAINT chk_lession_id;MySQL
ALTER TABLE lession DROP CHECK chk_lession_id最佳实战
虽然各个数据库系统都可以添加
CHECK
约束,但我们不推荐你这么做,因为这会影响数据插入和更新的速度