**概述**:本教程将讲解如何使用 SQL CHECK 约束,根据布尔表达式验证位于一列或一组列中的数据。
SQL CHECK 约束的简介
CHECK 约束是 SQL 中的一项完整性约束,它允许你规定一列或一组列中的值必须满足一项布尔表达式。
你可以在一列或一整张表上定义 CHECK 约束。如果你在一列上定义 CHECK 约束,那么 CHECK 约束仅会检查该列的值。然而,如果你在一张表上定义 CHECK 约束,那么它会根据其他列的值限制一列中的值。
CHECK 约束由关键字 CHECK 后跟括号中的布尔表达式组成
CHECK(Boolean_expression)
Code language: SQL (Structured Query Language) (sql)
要为 CHECK 约束指定一个名称,你需要使用以下语法
CONSTRAINT constraint_name CHECK(Boolean_expression)
Code language: SQL (Structured Query Language) (sql)
需要注意的是,当布尔表达式返回 true 或NULL 值时,CHECK 约束已得到满足。如果其中一个运算数为 NULL,大多数布尔表达式都会计算为 NULL,它们不会阻止受约束列中的空值。要确保该列不包含 NULL 值,你需要使用NOT NULL 约束。
SQL CHECK 约束举例
让我们看一些创建 CHECK 约束的示例。
要创建 selling_price 列中的值均为正数的 products 表,你需要使用以下CREATE TABLE 语句
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
selling_price NUMERIC(10,2) CHECK (selling_price > 0)
);
Code language: SQL (Structured Query Language) (sql)
CHECK 约束位于列的数据类型后面。如果你使用INSERT 或UPDATE 向 selling_price 插入或更新负值,表达式 selling_price >= 0
会返回 false,RDMBS 将返回一项错误。
你可以为 CHECK 约束指定一个单独的名称。约束名称有助于阐明 RDBMS 返回的错误消息,并准确了解哪些约束的值遭到违反。
想要为约束指定名称,你需要使用关键字 CONSTRAINT 后跟约束的名称。
例如,以下语句将 positive_selling_price
指定为 selling_price
列上 CHECK 约束的名称。
指定 CHECK 约束的语法如下
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
selling_price NUMERIC(10,2) CONSTRAINT positive_selling_price CHECK (selling_price > 0)
);
Code language: SQL (Structured Query Language) (sql)
你可以定义引用多列的 CHECK 约束。假设你将销售价格和成本都存储在 products 表中,你想确保成本始终低于销售价格。
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR (255) NOT NULL,
selling_price NUMERIC (10, 2) CHECK (selling_price > 0),
cost NUMERIC (10, 2) CHECK (cost > 0),
CHECK (selling_price > cost)
);
Code language: SQL (Structured Query Language) (sql)
首先,你让两个 CHECK 约束与 selling_price 和 cost 列关联,以确保每列中的值均为正数。
其次,你让另一个 CHECK 约束不附加到任何列上,而是作为 CREATE TABLE 语句中的最后一个条款出现。
前两个约束是列约束,而后一个约束是表约束。表约束不与任何列关联。
你可以使用以下语法为表约束指定一个名称。
CREATE TABLE table_name (
…,
CONSTRAINT check_constraint_name CHECK (Boolean_expression)
);
Code language: SQL (Structured Query Language) (sql)
例如,以下语句为上述 CHECK 约束指定了一个名称。
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR (255) NOT NULL,
selling_price NUMERIC (10, 2) CHECK (selling_price > 0),
cost NUMERIC (10, 2) CHECK (cost > 0),
CONSTRAINT valid_selling_price CHECK (selling_price > cost)
);
Code language: SQL (Structured Query Language) (sql)
在本教程中,你学习到了如何使用 CHECK 约束根据布尔表达式验证数据。