SQL CHECK 约束

在 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 是列的数据类型,例如 INTVARCHAR 等。
  • 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;

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战