SQL CHECK:检查性约束
您可以为一个字段或者多个字段定义 CHECK 约束。
示例
创建一个名为 website 的新表,该表包含七个字段,我们为 age 字段添加 CHECK 约束,要求网站年龄不大于 25 岁。代码如下:
CREATE TABLE website (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
url VARCHAR(30),
age TINYINT UNSIGNED NOT NULL CHECK(age<=25),
alexa INT UNSIGNED NOT NULL,
uv FLOAT DEFAULT '0',
country CHAR(3) NOT NULL ,
PRIMARY KEY (id)
);
其它一些常见用法:
规定体重必须大于 0 并且小于 100 公斤:
weight NUMERIC(9, 2) CHECK( weight>0 AND weight<=100 )
规定性别只能是男(male)和女(female):
sex CHAR(6) CHECK( sex='male' OR sex='female' )
当然,您也可以为多个字段添加 CHECK 约束。例如,在创建 website 表时,规定网站年龄不大于 25 岁,并且 Alexa 排名不能高于 10000,如下所示:
CREATE TABLE website (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
url VARCHAR(30),
age TINYINT UNSIGNED NOT NULL CHECK(age<=25),
alexa INT UNSIGNED NOT NULL CHECK(alexa<=10000),
uv FLOAT DEFAULT '0',
country CHAR(3) NOT NULL ,
PRIMARY KEY (id)
);
或者写作:
myCheck 为自定义的约束名字。CREATE TABLE website (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
url VARCHAR(30),
age TINYINT UNSIGNED NOT NULL,
alexa INT UNSIGNED NOT NULL,
uv FLOAT DEFAULT '0',
country CHAR(3) NOT NULL ,
PRIMARY KEY (id),
CONSTRAINT myCheck CHECK(age<=25 AND alexa<=10000)
);
如果您已经创建了 website 表,并且希望向 age 字段添加约束,则可以使用下面的语句:
ALTER TABLE website
MODIFY age TINYINT UNSIGNED NOT NULL CHECK(age<=25);
如果您希望给多个字段添加约束,可以使用下面的语法:
ALTER TABLE website
ADD CONSTRAINT myCheck CHECK(age<=25 AND alexa<=10000);
删除约束
要想删除 CHECK 约束,请使用下面的语法:
myCheck 是自定义的约束名字。注意,该语法不适用于 MySQL。ALTER TABLE website
DROP CONSTRAINT myCheck;