SQL CHECK:检查性约束
SQL CHECK 约束(检查性约束)用来限制字段的取值范围。您可以在 CHECK 约束中添加限制条件,只有满足这些条件的值才允许进入该字段。
您可以为一个字段或者多个字段定义 CHECK 约束。
其它一些常见用法:
当然,您也可以为多个字段添加 CHECK 约束。例如,在创建 website 表时,规定网站年龄不大于 25 岁,并且 Alexa 排名不能高于 10000,如下所示:
如果您已经创建了 website 表,并且希望向 age 字段添加约束,则可以使用下面的语句:
如果您希望给多个字段添加约束,可以使用下面的语法:
您可以为一个字段或者多个字段定义 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) );或者写作:
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) );myCheck 为自定义的约束名字。
如果您已经创建了 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 约束,请使用下面的语法:ALTER TABLE website DROP CONSTRAINT myCheck;myCheck 是自定义的约束名字。注意,该语法不适用于 MySQL。