在本教程中,将学习如何使用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约束来基于布尔表达式验证数据。