在 SQL 中,CHECK
约束用于指定必须验证的条件,以便将数据插入到表中。
示例
-- apply the CHECK constraint to the amount column
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);
这里,amount
列有一个检查条件:它的值必须大于 0。
CHECK 约束语法
SQL CHECK
约束的语法是
CREATE TABLE table_name (
column_name data_type CHECK(condition)
);
这里,
table_name
是要创建的表的名称column_name
是要实现约束的列的名称data_type
是列的数据类型,例如INT
、VARCHAR
等。condition
是需要检查的条件
注意:CHECK
约束仅用于在插入时验证数据。要检查行是否存在,请访问SQL EXISTS。
示例 1:SQL CHECK 约束成功
-- apply the CHECK constraint to the amount column
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);
-- amount equal to 100
-- record is inserted
INSERT INTO Orders(amount) VALUES(100);
这里,我们创建了一个名为 Orders
的表,其中包含一个 CHECK
约束,要求 amount
值大于 0。
当尝试插入一个 amount
值为 100 的记录时,插入过程成功,因为该值满足 CHECK
约束条件。
示例 2:SQL CHECK 约束失败
-- apply the CHECK constraint to the amount column
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);
-- amount equal to -5
-- results in an error
INSERT INTO Orders(amount) VALUES(-5);
这里,我们创建了一个名为 Orders
的表,其中包含一个 CHECK
约束,要求 amount
值大于 0。
当尝试插入一个 amount
值为 -5 的记录时,插入过程失败,因为该值不满足 CHECK
约束条件。
创建命名 CHECK 约束
创建一个命名约束是一个好习惯,这样更容易修改和删除约束。
这是一个创建命名 CHECK
约束的示例
-- create a named constraint named amountCK
-- the constraint makes sure that amount is greater than 0
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT,
CONSTRAINT amountCK CHECK (amount > 0)
);
这里,amountCK 是赋予 CHECK
约束的名称。
现有表中的 CHECK 约束
我们可以使用 ALTER TABLE
子句向现有表添加 CHECK
约束。例如,让我们向现有 Orders
表的 amount
列添加 CHECK
约束。
-- add CHECK constraint without name
ALTER TABLE Orders
ADD CHECK (amount > 0);
以下是我们如何添加命名 CHECK
约束。例如,
-- add CHECK constraint named amountCK
ALTER TABLE Orders
ADD CONSTRAINT amountCK CHECK (amount > 0);
注意事项
- 如果我们尝试向一个已经包含小于 0 的值的列添加
CHECK
约束amount > 0
,我们将收到错误。 - 由于我们的在线 SQL 编辑器基于 SQLite,因此不支持
ALTER TABLE
命令。
删除 CHECK 约束
我们可以使用 DROP
子句删除 CHECK
约束。例如,
SQL Server, PostgreSQL, Oracle
-- remove CHECK constraint named amountCK
ALTER TABLE Orders
DROP CONSTRAINT amountCK;
MySQL
-- remove CHECK constraint named amountCK
ALTER TABLE Orders
DROP CHECK amountCK;
另请阅读