SQL CHECK 检查约束

时间:2018-11-15 17:49:37  来源:igfitidea点击:

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

SQL CHECK检查约束简介

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

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

让我们看看batches 表:

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

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

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

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

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

创建检查约束示例

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

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约束:

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

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

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

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

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

删除检查约束

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

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

ALTER TABLE batches
DROP CONSTRAINT chk_date