SQL Server使用檢查約束來驗證數據實戰演示
以下文章主要是介紹在SQL Server使用檢查約束來驗證數據的實際操作步驟,以及對其在實際操作中要用到的一些事項的描述,下面的文章就是對SQL Server使用檢查約束來驗證數據的實際操作步驟的相關內容的具體介紹。
什么是檢查約束?
檢查約束是一個規則,它確認一個SQL Server表中某條記錄中的數據可接受的字段值。檢查約束幫助執行域完整性。域完整性定義了一個數據庫表中字段的有效值。檢查約束可以驗證一個單獨字段或一些字段的域完整性。你對一個單獨的字段可以有多個檢查完整性。假如被插入或更新的數據違反了一個檢查約束,那么數據庫引擎將不答應這個插入或更新的操作發生。
創建檢查約束
1 創建字段級別的檢查約束
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CHECK(age>0)
- )
這是一個字段級別的約束。這個檢查約束只答應age字段大于0。當我的表創建之后,這個CHECK約束也將被創建,并被賦予一個系統生成的約束名稱。
假如你想在一個CREATE TABLE操作期間命名你的檢查約束,那么你可以運行下面的代碼:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CONSTRAINT CK_CheckTable_Age CHECK(age>0)
- )
一個檢查約束表達式可以有多個條件。下面是一個例子,它顯示了一個有多個條件的檢查約束:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CONSTRAINT CK_CheckTable_Age CHECK(age>0 AND age<100)
- )
SQL Server使用檢查約束來驗證時假如你想創建一個表級別的檢查約束,那么你可以運行下面的代碼:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- sex BIT,
- CHECK(age>0 AND age<100 AND sex IN (0,1))
- )
有時,在你設計和創建了一個表后,你想對一個表添加一個檢查約束。這可以通過使用ALTER TABLE 語句來完成:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1));
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1) AND cname IN ('zy','zs'));
你可以使用一個單獨的ALTER TABLE語句來一次添加多個檢查約束到你的表中:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IN ('zy','zs'));
比較特別是的,字段中的NULL值可能答應你輸入數據到你的數據庫中,而這并不滿足你的需求。
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IN ('zy','zs'));
針對該約束,INSERT INTO CHECKTABLE(pid,cname,age,sex) VALUES(1,NULL,12,1) 該SQL語句是起作用的。這是因為NULL值用在比較操作中時,它被當作UNKNOWN。因為UNKNOWN不是FALSE,所以沒有違反檢查約束。因此,當你編寫你的檢查約束時,你需要對需要拒絕包含NULL值的地方很謹慎。上面的代碼應該改為:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IS NOT NULL AND cname IN ('zy','zs'));
結論
通過SQL Server使用檢查約束,你可以確保你的數據庫只包含通過了約束的數據。這使得你可以讓數據庫引擎控制你的數據驗證。這么做將使得你的應用程序不需要在每個你希望插入一條記錄或更新一條記錄到一個表中的地方都寫數據驗證規則的代碼。檢查約束是執行數據驗證的一個簡潔方法。
【編輯推薦】
- SQL Server鏡像工作方式與實現方式
- SQL Server所有表的列信息展示
- 創建SQL Server全文檢索的2方案
- 實現SQL Server 2000全文索引遷移步驟
- SQL Server全文索引的實例演示