跳到主要内容

SQL CHECK约束

提示

1.SQL中的CHECK约束CHECK 约束用于确保表中插入的数据满足特定条件,如字段值的限制。

2.CHECK约束的应用:例如,在 Orders 表的 amount 列上设置 CHECK(amount > 0) 约束,以确保 amount 值大于0。

3.CHECK约束的添加与移除:可以在创建表时添加 CHECK 约束,也可以通过 ALTER TABLE 向现有表添加约束;使用 DROP CONSTRAINT 语句来移除已有的 CHECK 约束。

在 SQL 中,CHECK 约束用于指定插入数据到表中必须验证的条件。

示例

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 约束成功

CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);

-- amount 等于 100
-- 记录被插入
INSERT INTO Orders(amount) VALUES(100);

这里,我们创建了一个名为 Orders 的表,并设置了一个 CHECK 约束,要求 amount 值大于 0

当尝试插入一个 amount 值为 100 的记录时,插入过程成功,因为该值满足 CHECK 约束条件。

示例 2:SQL CHECK 约束失败

CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);

-- amount 等于 -5
-- 导致错误
INSERT INTO Orders(amount) VALUES(-5);

这里,我们创建了一个名为 Orders 的表,并设置了一个 CHECK 约束,要求 amount 值大于 0

当尝试插入一个 amount 值为 -5 的记录时,插入过程失败,因为该值不满足 CHECK 约束条件。

创建命名 CHECK 约束

创建命名约束是一种好习惯,这样可以更容易地更改和删除约束。

以下是创建命名 CHECK 约束的示例:

-- 约束确保 amount 大于 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 约束。

-- 添加无名称的 CHECK 约束
ALTER TABLE Orders
ADD CHECK (amount > 0);

以下是如何添加命名的 CHECK 约束。例如,

-- 添加名为 amountCK 的 CHECK 约束
ALTER TABLE Orders
ADD CONSTRAINT amountCK CHECK (amount > 0);

注意事项:

  • 如果我们尝试向已有小于 0 值的列添加 CHECK 约束 amount > 0,我们将得到一个错误。
  • 我们的在线 SQL 编辑器基于 SQLite,不支持 ALTER TABLE 命令。

移除 CHECK 约束

我们可以使用 DROP 子句移除 CHECK 约束。例如,

SQL Server、PostgreSQL、Oracle

-- 移除名为 amountCK 的 CHECK 约束
ALTER TABLE Orders
DROP CONSTRAINT amountCK;

MySQL

--

移除名为 amountCK 的 CHECK 约束
ALTER TABLE Orders
DROP CHECK amountCK;

推荐阅读: SQL 约束