MySQL中的主鍵約束和外來鍵約束

2023-01-25 07:31:34 字數 1208 閱讀 1891

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。

主鍵約束和外來鍵約束中的WITH NOCHECK

alter table tb with nocheck add constraintfk tbid foreign key aid referencesta id 如果沒指定with nocheck,可能會報下面的錯。伺服器 訊息 547,級別 16,狀態 1,行 1 alter table 語句與...

SQL的主鍵和外來鍵約束

原文 sql的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外來鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言...

SQL的主鍵和外來鍵約束

sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外來鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,...