SQL检查约束

在本教程中,将学习如何使用SQL CHECK约束来验证基于布尔表达式的列或一组列中的数据。

1. SQL CHECK约束简介

CHECK约束是SQL中的完整性约束,它允许指定列或列集中的值必须满足布尔表达式。

可以在单个列或整个表上定义CHECK约束。 如果在单个列上定义CHECK约束,则CHECK约束仅检查此列的值。 但是,如果在表上定义CHECK约束,则会根据同一行的其他列中的值限制列中的值。

CHECK约束由关键字CHECK后跟括号中的布尔表达式组成:

CHECK(Boolean_expression)

如果要为CHECK约束指定名称,请使用以下语法:

CONSTRAINT constraint_name CHECK(Boolean_expression)

值得注意的是,当布尔表达式返回trueNULL值时,视为满足CHECK约束。 如果其中一个操作数为NULL,则布尔表达式求值为NULL,它们不会阻止约束列存储NULL值。 若要确保该列不包含NULL值,请使用NOT NULL约束。

2. SQL CHECK约束示例

下面来看一些创建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_pricecost列相关联的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约束来基于布尔表达式验证数据。

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-check-constraint.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞