可以爲一個表定義許多 CHECK 約束。可以使用"表"屬性頁創建、修改或刪除每個 CHECK 約束。
[attach]402[/attach]
1、將新的 CHECK 約束附加到表或列
將 CHECK 約束附加到表以指定一列或多列中可接受的數據值。
附加新的 CHECK 約束
ALTER TABLE course ADD CONSTRAINT cno_ck
CHECK (cno like 'c%')
在數據庫關係圖中,右擊包含約束的表,然後從快捷菜單中選擇"約束"命令。
-或-
爲將包含約束的表打開表設計器,在表設計器中右擊,然後從快捷菜單中選擇"約束"命令。
選擇"新建"命令。"選定的約束"框顯示由系統分配的新約束名。系統分配的名稱以"CK_"開始,後跟表名。
在"約束表達式"框中,爲 CHECK 約束鍵入 SQL 表達式。例如,若要將 authors 表中 state 列的輸入項限制爲 New York,請鍵入:
state = 'NY'
或者,若要要求 zip 列中的輸入項爲 5 位數字,請鍵入:
zip LIKE '[0-9][0-9][0-9][0-9][0-9]' 中間不能有空格
若要給約束提供一個不同的名稱,請在"約束名"框中鍵入名稱。
用複選框控制何時強制約束:
若要在創建約束前對現有數據測試約束,請選中"創建中檢查現存數據"複選框。
若要在該表中發生複製操作時強制約束,請選中"對複製強制約束"複選框。
若要在該表中插入或更新行時強制約束,請選中"對 INSERT 和 UPDATE 強制約束"複選框。
2、定義 CHECK 約束表達式
當將 CHECK 約束附加到表或列時,必須包括 SQL 表達式。
1、可以創建簡單的約束表達式在簡單條件下檢查數據;或使用布爾運算符創建複雜的約束表達式以在多種條件下檢查數據。例如,假設 authors 表中有一個 zip 列,該列要求 5 位數字的字符串。下面的示例約束表達式確保只允許 5 位數字:
zip LIKE '[0-9][0-9][0-9][0-9][0-9]'
2、或者假設 sales 表中有一個名爲 qty 的列,該列要求大於 0 的值。下面的示例約束確保只允許正值:
qty > 0
3、或者假設 orders 表限制所有信用卡訂單可接受的信用卡類型。下面的示例約束確保如果用信用卡發出訂單,則只接受 Visa、MasterCard 或 American Express:
NOT (payment_method = 'credit card') OR
(card_type IN ('VISA', 'MASTERCARD', 'AMERICAN EXPRESS'))
check(col1 like 's%')
定義約束表達式
創建新的 CHECK 約束。
在屬性頁的"CHECK 約束"選項卡中,使用下列語法在"約束表達式"框中鍵入表達式:
{constant | column_name | function | (subquery)}
[{operator | AND | OR | NOT}
{constant | column_name | function | (subquery)}...]
SQL 語法由下列參數組成:
[attach]403[/attach]
3、修改 CHECK 約束
當要更改約束表達式,或更改對特定條件啓用或禁用約束的選項時,修改 CHECK 約束。
修改 CHECK 約束
I、在數據庫關係圖中右擊包含約束的表,然後從快捷菜單中選擇"屬性"命令。
-或-
爲包含約束的表打開表設計器,在表設計器中右擊,然後從快捷菜單中選擇"屬性"命令。
II、選擇"CHECK 約束"選項卡。
III、從"選定的約束"列表中,選擇要更改的約束。
IV、完成下表中的操作:
[attach]404[/attach]
比你帥 2007-12-5 12:31
4、創建 CHECK 約束時檢查現有數據
當創建 CHECK 約束時,可以設置選項將約束只應用於新數據或同時也應用於現有數據。當知道現有數據已滿足新 CHECK 約束時,或者當業務規則要求僅從這點開始強制約束時,這種使約束僅應用於新數據的選項很有用。
例如,過去可能要求郵政編碼必須是五位數字,但現在卻需要新數據允許有九位郵政編碼。包含五位郵政編碼的舊數據將與包含九位郵政編碼的新數據共存。
I、創建 CHECK 約束時檢查現有數據
II、選擇"CHECK 約束"選項卡。
III、從"選定的約束"列表中選擇約束。
IV、選擇"創建中檢查現存數據"複選框。默認情況下選擇該選項。
當保存表或數據庫關係圖時,將應用 CHECK 約束。如果在保存過程中遇到任何違反約束的行爲,則不能保存表。
5、對 INSERT 和 UPDATE 語句禁用 CHECK 約束
當在表中添加、更新或刪除數據時,可以禁用 CHECK 約束。禁用約束使您能夠執行下列事務:
如果表中的現有行過去必須遵從的特定業務規則已不再適用,則可以向該表添加新的數據行(使用 INSERT 語句)。例如,過去可能要求郵政編碼必須是五位數字,但現在卻需要新數據允許有九位郵政編碼。包含五位郵政編碼的舊數據將與包含九位郵政編碼的新數據共存。
如果表中的現有行過去必須遵從的特定業務規則已不再適用,則可以修改現有行(使用 UPDATE 語句)。例如,可能需要將所有現有的五位郵政編碼更新爲九位郵政編碼。
如果知道新數據將違反約束,或者約束僅適用於數據庫中的已有數據,則選擇該選項以在 INSERT 和 UPDATE 事務處理期間禁用 CHECK 約束。
對 INSERT 和 UPDATE 語句禁用 CHECK 約束
I、在數據庫關係圖中右擊包含約束的表,然後從快捷菜單中選擇"屬性"命令。
-或-
爲包含約束的表打開表設計器,在表設計器中右擊,然後從快捷菜單中選擇"屬性"命令。
II、選擇"CHECK 約束"選項卡。
III、從"選定的約束"列表中選擇約束。
IV、清除"對 INSERT 和 UPDATE 強制約束"複選框。
可以在添加或修改數據後選擇該選項,以確保約束能應用到後續的數據修改中。
6、對複製禁用 CHECK 約束
當在另一個數據庫中複製表時,可以禁用 CHECK 約束。複製表時,表定義和數據從源數據庫複製到目的數據庫。這兩個數據庫通常(但不一定)位於不同的服務器上。如果 CHECK 約束僅針對源數據庫,則可能會不必要地阻止新數據輸入到目的數據庫。當在遠程站點上覆制數據庫時,不應重新應用 CHECK 約束,因爲:
數據在被輸入原始數據庫時將進行完整性檢查。
如果數據違反 CHECK 約束,複製將失敗。
對複製禁用 CHECK 約束
I、在數據庫關係圖中右擊包含約束的表,然後從快捷菜單中選擇"屬性"命令。
-或-
爲包含約束的表打開表設計器,在表設計器中右擊,然後從快捷菜單中選擇"屬性"命令。
II、選擇"CHECK 約束"選項卡。
III、從"選定的約束"列表中選擇約束。
IV、清除"對複製強制約束"複選框。
7、 刪除 CHECK 約束
刪除 CHECK 約束
當要刪除對約束表達式包含的列所接受數據值的限制時,刪除 CHECK 約束。
刪除 CHECK 約束
I、在數據庫關係圖中右擊包含約束的表,然後從快捷菜單中選擇"屬性"命令。
-或-
爲包含約束的表打開表設計器,在表設計器中右擊,然後從快捷菜單中選擇"屬性"命令。
II、選擇"CHECK 約束"選項卡。
III、從"選定的約束"列表中選擇約束。
IV、選擇"刪除"按鈕。
注意 選擇"刪除"按鈕將導致一個無法撤消的操作,而且不保存對數據庫關係圖所做的所有其它更改。若要撤消該操作,請不保存更改即關閉當前的數據庫關係圖和所有其它打開的數據庫關係圖。
當保存表或關係圖時,約束即從數據庫中被刪除。