当前位置:首页 科普知识 check约束

check约束

发布时间:2023-09-07 08:25:52

在数据库中,CHECK 约束是指约束表中某一个或者某些列中可接受的数据值或者数据格式。例如,可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码。

check约束详细介绍

在数据库中,CHECK 约束是指约束表中某一个或者某些列中可接受的数据值或者数据格式。例如,可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码。

CHECK 约束可以应用于一个或者多个列,也可以将多个CHECK 约束应用于一个列。

当除去某个表时,对这个表的CHECK 约束也将同时被去除。

check约束限制

CHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以如果赋值表达式中存在这些值,则约束可能会被覆盖而不起作用。例如,假设对 int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值 10(即 MyColumn=10)。如果将值 NULL 插入到 MyColumn,数据库引擎将插入 NULL 且不返回错误。

如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效。这种情况可能会产生意外结果,如下面的示例所示。

CREATE TABLE CheckTbl (col1 int, col2 int);GOCREATE FUNCTION CheckFnctn()RETURNS intAS BEGIN DECLARE @retval int SELECT @retval = COUNT(*) FROM CheckTbl RETURN @retvalEND;GOALTER TABLE CheckTblADD ConSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );GO 添加的 CHECK 约束指定表 CheckTbl 必须至少包含一行。但是,因为表中不包含任何可供检查此约束的条件的行,所以 ALTER TABLE 语句将成功。

执行 DELETE 语句时不验证 CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果。例如,假设对表 CheckTbl 执行下列语句。

INSERT INTO CheckTbl VALUES (10, 10)

GO

DELETE CheckTbl WHERE col1 = 10;

即使 CHECK 约束指定表 CheckTbl 必须至少包含 1 行,DELETE 语句也会成功。

check约束创建

例如,将【成绩信息】表中“分数”列指定为CHECK约束,即0<=分数<=100,语句如下:

USE 学生成绩管理系统

CREATE TABLE 成绩信息

(

成绩编号 int NOT NULL PRIMARY KEY,

学生编号 nchar(50) NOT NULL,

考试编号 nchar(10) NOT NULL,

课程编号nchar(10) NOT NULL,

分数 nchar(10) NOT NULL CHECK (分数in(between '0' and '100')

)

)

温馨提示:
本文【check约束】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6