1. 程式人生 > >SQL Server Check 約束用法詳解

SQL Server Check 約束用法詳解

一、定義:

       CHECK 約束用於限制列中的值的範圍。

       如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。

       如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

資料庫,就必須要會寫約束。

運算子

含義

=

等於

>

大於

<

小於

>=

大於或等於

<=

小於或等於

<>

不等於

!

(Java語言中為not)

萬用字元

解釋

示例

‘_’

一個字元

A Like 'C_'

%

任意長度的字串

B Like 'CO_%'

[ ]

括號中所指定範圍內的一個字元

C Like '9W0[1-2]'

[^]

不在括號中所指定範圍內的一個字元

D Like ‘%[A-D][^1-2]'

二、將新的 CHECK 約束附加到表或列
    1、附加新的 CHECK 約束  
  (1)、在資料庫關係圖中,右擊包含約束的表,然後從快捷選單中選擇"約束"命令。
  -或-
  
  為將包含約束的表開啟表設計器,在表設計器中右擊,然後從快捷選單中選擇"約束"命令。
  
  (2)、選擇"新建"命令。"選定的約束"框顯示由系統分配的新約束名。系統分配的名稱以"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 表示式。
  
  可以建立簡單的約束表示式在簡單條件下檢查資料;或使用布林運算子建立複雜的約束表示式以在多種條件下檢查資料。例如,假設 authors 表中有一個 zip 列,該列要求 5 位數字的字串。下面的示例約束表示式確保只允許 5 位數字:
  
  zip LIKE '[0-9][0-9][0-9][0-9][0-9]'
  或者假設 sales 表中有一個名為 qty 的列,該列要求大於 0 的值。下面的示例約束確保只允許正值:
  
  qty > 0
  或者假設 orders 表限制所有信用卡訂單可接受的信用卡型別。下面的示例約束確保如果用信用卡發出訂單,則只接受 Visa、MasterCard 或 American Express:
  
  NOT (payment_method = 'credit card') OR
  (card_type IN ('VISA', 'MASTERCARD', 'AMERICAN EXPRESS'))


  3、定義約束表示式
  
  建立新的 CHECK 約束。
  
  在屬性頁的"CHECK 約束"選項卡中,使用下列語法在"約束表示式"框中鍵入表示式:


  {constant | column_name | function | (subquery)}
  [{operator | AND | OR | NOT}
  {constant | column_name | function | (subquery)}...]
 

二、修改 CHECK 約束
  當要更改約束表示式,或更改對特定條件啟用或禁用約束的選項時,修改 CHECK 約束。
  
  I、在資料庫關係圖中右擊包含約束的表,然後從快捷選單中選擇"屬性"命令。
  -或-
  
  為包含約束的表開啟表設計器,在表設計器中右擊,然後從快捷選單中選擇"屬性"命令。
  
  II、選擇"CHECK 約束"選項卡。
  
  III、從"選定的約束"列表中,選擇要更改的約束。
     IV、填寫修改規則。

    當儲存表或關係圖時,約束即在資料庫內被更新。

三、刪除 CHECK 約束 

    當要刪除對約束表示式包含的列所接受資料值的限制時,刪除 CHECK 約束。
  
  
  I、在資料庫關係圖中右擊包含約束的表,然後從快捷選單中選擇"屬性"命令。
  -或-
  
  為包含約束的表開啟表設計器,在表設計器中右擊,然後從快捷選單中選擇"屬性"命令。
  
  II、選擇"CHECK 約束"選項卡。
  
  III、從"選定的約束"列表中選擇約束。
  
  IV、選擇"刪除"按鈕。


  注意  選擇"刪除"按鈕將導致一個無法撤消的操作,而且不儲存對資料庫關係圖所做的所有其它更改。若要撤消該操作,請不儲存更改即關閉當前的資料庫關係圖和所有其它開啟的資料庫關係圖。
  
  當儲存表或關係圖時,約束即從資料庫中被刪除。

 份證號碼的約束表示式怎麼寫?

…….

邏輯表示式

說明

示例

AND

邏輯與

1 AND 1 = ; 1 AND 0 = 0; 0 AND 0 = 0;

OR

邏輯或

1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0;

NOT

邏輯非

NOT 1 = 0; NOT 0 = 1;

     右擊選擇表中的check約束--新增約束--寫入常規表示式(sage代表代表某一欄位名,並且是該欄位的值)

                    sage.value >15 && sage.value<31

                    sage.value == sage

                    >  == >

                    && == and

                    sage > 15 and sage<31

                    約束電話格式:13.........  15.......  18.....   147.......

                    if(stel13....)

                    stel like '[1]'  表示stel電話的值第一個字元是1並且只能是1個字元

                    ([stel] like '[1][3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

                     OR [stel] like '[1][5][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

                    驗證郵箱

                           sqqemail like '[^0-9]%[@][q][q][.][c][o][m]'

                           表示第一個字元不允許是數字,第一個字元與@符號之間是任意字元。後面是固定格式