SQL CHECK 检查约束


在本教程中, 我们将了解SQL CHECK约束以及如何应用它来强制域的完整性。

SQL CHECK检查约束简介

CHECK约束限制可以在表中的一列或多列中输入的值。CHECK约束自动强制列的数据完整性。

CHECK约束与返回TRUE或FALSE的逻辑表达式一起使用。
可以为一个列创建多个检查约束,也可以为表中的多个列创建单个检查约束。

让我们看看batches 表:

例如,在batches 表中,我们可以添加一个检查约束,以确保结束日期总是大于或等于开始日期,并且开始日期总是大于或等于1970-01-01。逻辑表达式如下:

1
enddate >= begindate AND begindate >= '1970-01-01'

如果您试图输入的开始日期小于结束日期,或者开始日期小于1970-01-01,那么数据库引擎将拒绝进行更改并发出错误信息。

就强制您可以在列中输入的值而言,CHECK检查约束类似于外键约束。

不同之处在于CHECK检查约束使用逻辑表达式来确定有效值,而外键约束使用来自另一个表中的列的值来确定。

创建检查约束示例

我们可以在创建一个表时,定义一个检查约束,如下所示:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE batches (
batchid int(11) NOT NULL,
batchname varchar(255) NOT NULL,
begindate date NOT NULL,
enddate date NOT NULL,
courseid int(11) NOT NULL,
PRIMARY KEY (batchid),
CONSTRAINT fk_courseid FOREIGN KEY (courseid) REFERENCES courses (courseid),
CONSTRAINT chk_date CHECK(enddate >= begindate AND begindate >= '1970-01-01')
)

在上面的语句中,我们使用了下面的子句定义一个CHECK约束:

1
CONSTRAINT chk_date CHECK(enddate >= begindate AND begindate >= '1970-01-01')

检查约束的名称为chk_date,用于确定开始日期和结束日期列的有效值的逻辑表达式为

1
enddate >= begindate AND begindate >= '1970-01-01'

您可以使用ALTER TABLE 给一个现有的表添加一个检查约束,如下所示:

1
2
3
ALTER TABLE batches
ADD CONSTRAINT chk_date
CHECK(enddate >= begindate AND begindate >= '1970-01-01')

删除检查约束

要删除检查约束,还需要使用ALTER TABLE语句。

例如,下面的语句删除了chk_date检查约束:

1
2
ALTER TABLE batches
DROP CONSTRAINT chk_date


原文链接:https://codingdict.com/