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