check约束

check约束【check约束】在资料库中,CHECK 约束是指约束表中某一个或者某些列中可接受的数据值或者数据格式 。例如,可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码 。
CHECK 约束可以套用于一个或者多个列,也可以将多个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)GODELETE 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')))