-
check約束
鎖定
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)
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') ) )
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:18次歷史版本
- 最近更新: 青青的麦田year