在本教程中,将学习如何使用sql check
约束来验证基于布尔表达式的列或一组列中的数据。
check
约束是sql中的完整性约束,它允许指定列或列集中的值必须满足布尔表达式。
可以在单个列或整个表上定义check
约束。 如果在单个列上定义check
约束,则check
约束仅检查此列的值。 但是,如果在表上定义check
约束,则会根据同一行的其他列中的值限制列中的值。
check
约束由关键字check
后跟括号中的布尔表达式组成:
check(boolean_expression)
如果要为check
约束指定名称,请使用以下语法:
constraint constraint_name check(boolean_expression)
值得注意的是,当布尔表达式返回true
或null
值时,视为满足check
约束。 如果其中一个操作数为null
,则布尔表达式求值为null
,它们不会阻止约束列存储null
值。 若要确保该列不包含null
值,请使用not null
约束。
下面来看一些创建check
约束的例子。
要创建一个products
表,其products_price
列中的值必须为正数,请使用以下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)
);
check
约束位于列的数据类型之后。 如果使用负值插入或更新售价,则表达sell_price> = 0
将返回false
,并且rdmbs将返回错误。
可以为check
约束指定单独的名称。 约束名称可帮助明确rdbms返回的错误消息,并确切地知道该值违反了哪个约束。
要为约束指定名称,请使用constraint
关键字,后跟约束的名称。
例如,以下语句将positive_selling_price
指定为sell_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)
);
可以定义引用多个列的check
约束。假设在product
表中存储了销售价格和成本,并且希望确保成本始终低于销售价格。
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)
);
首先,有两个与sell_price
和cost
列相关联的check
约束,以确保每列中的值为正。
其次,有另一个未附加到任何列的check
约束,而是显示为create table
语句中的最后一个子句。
前两个约束是列约束,而第三个约束是表约束。 表约束不与任何列关联。使用以下语法为表约束指定名称。
create table table_name (
…,
constraint check_constraint_name check (boolean_expression)
);
例如,以下语句为上面的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)
);
在本教程中,我们介绍了check
约束的一些概念,并演示如何使用check
约束来基于布尔表达式验证数据。