自己整理的學習資料——DB2 V8資料庫基礎(二十六)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自己整理的學習資料——DB2 V8資料庫基礎(六)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(八)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十二)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十三)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十六)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十八)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十九)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(四)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(五)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十二)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十四)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十八)DB2資料庫
- mysql資料庫學習基礎知識整理MySql資料庫
- 資料庫基礎知識整理與複習總結資料庫
- 【java基礎資料整理】Java
- 零基礎學習MySQL資料庫—3MySql資料庫
- 學習資料庫的基礎知識的書籍資料庫
- 突擊學習之資料庫基礎彙總資料庫
- 資料庫學習筆記 - MySQL基礎知識資料庫筆記MySql
- MySQL資料庫基礎學習筆記(整理自蘇勇老師的MySQL基礎課程視訊)MySql資料庫筆記
- Go 學習資料整理Go
- iOS 學習資料整理iOS
- swift學習資料整理Swift
- 資料庫 基礎資料庫
- 資料庫基礎資料庫
- 資料庫資料整理資料庫
- 語料庫基礎學習
- 整理最全的“大資料”學習資源大資料
- 大資料學習方法,學大資料需要的基礎和路線大資料
- SLAM(一)----學習資料整理SLAM
- STF,docker學習資料整理Docker