自己整理的學習資料——DB2 V8資料庫基礎(二十六)

rheet1978發表於2008-10-30

5       約束

約束被 DB2 Universal Database(TM)DB2 UDB)用來對資料實施業務規則。

  • 非空(NOT NULL
  • 惟一
  • 主鍵
  • 外來鍵
  • 表檢查

此外,還有另一種名為 資訊約束(informational constraint的約束。與上面所列的這五種約束型別不同的是,資訊約束不是由資料庫管理器實施的,但是 SQL 編譯器可用它來提高查詢效能。

您可以在建立一個新表時定義一個或多個 DB2 UDB 約束,也可以稍後通過更改表來定義它們。CREATE TABLE 語句是十分複雜的;所以儘管實際上其選項中只有一小部分是用於定義約束的,但是當在語法圖中進行檢視時,那些選項本身看上去就相當複雜。通過 DB2 Control Center 可使約束管理更簡單、方便。

 

 

5.1    唯一約束

唯一約束包括主鍵和唯一鍵2種。用unique關鍵字,不准許列中有空值。建立唯一約束系統會自動建立唯一索引。

 

create table test1(id varchar(10) not null primary key ,name varchar(10) not null unique )

 

alter table test1 add constraint a1 unique(name)   //要求name是非空列

 

唯一索引則不同:不要求列非空,只要列值唯一即可。

create unique index  a1 on test2(name)

 

唯一約束不能為空,唯一索引可以為空。

5.2    引用約束(就是外來鍵約束)

外來鍵的值必須是父鍵的一部分或者為NULL

插入規則

  • 外來鍵的插入值必須匹配其父表中的某個父鍵值,也就是沒有找到父項時取消插入

         刪除規則:

  • Restrict(限制)︰如果有從行就不能刪除父行。
  • Cascade(級聯)︰刪除父表中的行會自動刪除從表中的任何相關行。
  • No Action(無動作)︰這是預設的情況,如果有從行就不能刪除父行。和restrict的區別在於何時執行約束。
  • Set Null(置空)︰該規則確保在父表刪除一行時,講從表的外來鍵置空(如果允許空的話),行的其它列保持不變。

         更新規則︰

Restrict

No Action

  • 外來鍵(foreign key的更新值必須匹配其父表中的某個父鍵值,並且當完成 父鍵(parent key上的 update 操作時,所有的外來鍵值必須有匹配的父鍵值。總的來說,這意味著不能存在任何孤兒;每個子表必須有一個父表。

5.3    表檢查約束

表檢查約束(table check constraint對將要新增到表中的資料實施已定義的限制。例如,一個表檢查約束可確保每當在 EMPLOYEE 表中新增或更新電話分機時,僱員的電話分機號碼都正好為四位數字。可在 CREATE TABLE 語句中使用 CHECK 子句或者在如下的 ALTER TABLE 語句中定義表檢查約束。

建立表檢查約束。PHONENO_LENGTH 約束確保向 EMPLOYEE 表新增的電話分機正好為四位數字。

db2 alter table employee

        add constraint phoneno_length check (length(rtrim(phoneno)) = 4)

如果表中的現有行包含違反新約束的值,您就不能建立此表檢查約束(圖 8)。在適當更新了那些不相容的值之後,您就可以成功新增或修改此約束了。

5.3.1   將表置於檢查掛起狀態

使用 SET INTEGRITY 語句可以開啟或者關閉表檢查約束。這將非常有用,例如,當在給表載入大型資料的期間優化效能時。

把表調整為沒有檢查資料的線上狀態

SET   INTEGRITY  FOR  TABLE_NAME  ALL   IMMEDIATE   UNCHECKED

 

註釋:見《SQL Reference Volume 2

 

 


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-481945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章