首页 > SQL 阅读:16967

SQL CHECK:检查性约束

SQL CHECK 约束(检查性约束)用来限制字段的取值范围。您可以在 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)
);
或者写作:
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

AltStyle によって変換されたページ (->オリジナル) /