設定外來鍵關聯是可以設定在刪除時和在更新時的操作,其中有三個比較重要的。
(1)層疊(級聯):cache
(2)設為null:set null
(3)無動作:no action
(1)層疊,當主表刪除一條記錄,那麼從表對應的引用了被刪除的記錄的主鍵作為外來鍵的記錄將會級聯刪除。更新時候也一樣。
(2)設為null,當主表刪除一條記錄,那麼從表對應的引用了被刪除的記錄的主鍵作為外來鍵的記錄的外來鍵將會設為null。
(3)無動作,顧名思義,不做任何動作。
當然在資料庫設計中,最理想的狀態就是層疊
,但是有時候在專案開發中卻不能這麼做,因為系統有這種需求—-儲存各種記錄,方便以後做統計,所以就不能使用層疊,那麼不使用層疊,可不可以使用設為null
呢?當然可以,只是有時候又會遇到這麼一種情況–多對多的情況產生的中間表;按道理,多對多產生的中間表我們沒有必要再使用乙個**建作為主鍵,因為這樣的話,不能保證多對多的中間表的對映關係不重複;為了保證對對多的中間表的對映關係不重複,只能將兩個外來鍵作為主鍵,作為主鍵的字段必定不能為null,所以設為null
又不適用了。
現在只剩下無動作
,但是發現即使設定為無動作,刪除主表的某條記錄(若這條記錄的主鍵被從表的記錄引用了)卻報錯。不讓刪除。
解決辦法是臨時設定不檢查外來鍵約束:
set foreign_key_checks = 0;
恢復檢查外來鍵約束:
set foreign_key_checks = 1;
MySQL 資料庫外來鍵
如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...
MySQL資料庫外來鍵
設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...
mysql資料庫教程 外來鍵 MySQL資料庫外來鍵
設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...