1、主鍵約束
表通常具有包含唯一標識表中每一行的值的一列或一組列。 這樣的一列或多列稱為表的主鍵 (PK),用於強制表的實體完整性。 由於主鍵約束可保證數據的唯一性,因此經常對標識列定義這種約束。
如果為表指定了主鍵約束, 數據庫引擎將通過為主鍵列自動創建唯一索引來強制數據的唯一性。 當在查詢中使用主鍵時,此索引還允許對數據進行快速訪問。
如果對多列定義了主鍵約束,則一列中的值可能會重復,但來自主鍵約束定義中所有列的值的任何組合必須唯一。
2、外鍵約束
也稱為引用約束或引用完整性約束,能夠定義表間以及表內必需的關系。
例如,典型的外鍵約束可能規定 EMPLOYEE 表中的每個職員必須 是一個現有部門的成員,該部門在 DEPARTMENT 表中定義。
引用完整性是數據庫的一種狀態,在該狀態中,所有外鍵的所有值都有效。外鍵是表中的一列或一組列,它的值需要與其父表的行的至少一個主鍵或唯一鍵值相匹配。
引用約束是這樣一種規則,僅當滿足下列其中一個條件時,外鍵的值才有效:
- 它們作為父鍵的值出現
- 外鍵的某些組成部分為空
例如,要建立此關系,應將 EMPLOYEE 表中的部門號定義成外鍵,並將 DEPARTMENT 表中的部門號定義成主鍵。
這樣當在EMPLOYEE表中新添加一個員工,而其所在部門的代號在DEPARTMENT表中未出現時,這將是一個無效鍵記錄,將被阻止。
引用約束的目的是保證表關系得到維護並遵循數據輸入規則。
這意味着只要引用約束有效,數據庫管理器就保證對於子表中其外鍵列中具有非空值的每行,相應父表中都存在一個其父鍵中具有匹配值的行。
3、當操作違反引用約束時,數據庫管理器通過強制執行與每個引用約束關聯的一組規則來處理這類情況。
當 SQL 操作嘗試更改數據的方式導致引用完整性受到影響時,可能是違反了引用約束。例如,
- 插入操作可能嘗試將一個數據行插入到子表中,該行的外鍵列中的值與相應父表的父鍵中的值不匹配。
- 更新操作可能嘗試將子表的外鍵列中的值更改為一個在相應父表的父鍵中沒有匹配值的值。
- 更新操作可能嘗試將父表的父鍵中的值更改為一個在子表的外鍵列中沒有匹配值的值。
- 刪除操作可能嘗試從父表中除去在子表的外鍵列中具有匹配值的記錄。
此時,數據庫管理器通過強制執行與每個引用約束關聯的一組規則來處理這類情況。這組規則包括:
- 插入規則
- 更新規則
- 刪除規則
4、引用約束的插入規則
外鍵的非空插入值必須與父表的父鍵的某些值相匹配。如果組合外鍵的值的任何組成部分為空,那么該值為空。指定外鍵時,此規則是隱式的。
5、引用約束的更新規則
引用約束的更新規則是在定義引用約束時指定的。選項有 NO ACTION 和 RESTRICT。在更新父表的某行或從屬表的某行時應用更新規則。
6、引用約束的刪除規則
刪除規則是在定義引用約束時指定的。選項有 NO ACTION、RESTRICT、CASCADE 或 SET NULL。僅當外鍵的某些列允許空值時,才能指定 SET NULL。