亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

何時使用“ON UPDATE CASCADE”

何時使用“ON UPDATE CASCADE”

慕工程0101907 2019-08-23 16:02:25
何時使用“ON UPDATE CASCADE”我經常使用“ON DELETE CASCADE”,但我從不使用“ON UPDATE CASCADE”,因為我不太確定在什么情況下它會有用。為了便于討論,請看一些代碼。CREATE TABLE parent (     id INT NOT NULL AUTO_INCREMENT,     PRIMARY KEY (id));CREATE TABLE child (     id INT NOT NULL AUTO_INCREMENT, parent_id INT,     INDEX par_ind (parent_id),     FOREIGN KEY (parent_id)         REFERENCES parent(id)         ON DELETE CASCADE);對于“ON DELETE CASCADE”,如果id刪除了具有a的父級,parent_id = parent.id則將自動刪除子級中的記錄。這應該沒問題。這意味著當id更新父級時,“ON UPDATE CASCADE”會做同樣的事情嗎?如果(1)為真,則意味著如果parent.id不可更新(或永遠不會更新),則不需要使用“ON UPDATE CASCADE”,就像它是AUTO_INCREMENT或者總是設置為TIMESTAMP。是對的嗎?如果(2)不成立,在其他什么情況下我們應該使用“ON UPDATE CASCADE”?如果我(由于某種原因)更新了child.parent_id不存在的內容,它會被自動刪除嗎?好吧,我知道,上面的一些問題可以通過程序測試來理解,但我也想知道這是否依賴于數據庫供應商。請說清楚。
查看完整描述

3 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

確實,如果您的主鍵只是一個自動遞增的標識值,那么您將無法真正使用ON UPDATE CASCADE。

但是,假設您的主鍵是10位UPC條形碼,并且由于擴展,您需要將其更改為13位UPC條形碼。在這種情況下,ON UPDATE CASCADE將允許您更改主鍵值,并且具有該值的外鍵引用的任何表將相應地更改。

在引用#4時,如果將子ID更改為父表中不存在的內容(并且您具有引用完整性),則應該獲得外鍵錯誤。


查看完整回答
反對 回復 2019-08-23
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

  1. 是的,這意味著,例如,如果你做UPDATE parent SET id = 20 WHERE id = 10所有孩子,parent_id的10也將更新為20

  2. 如果不更新外鍵引用的字段,則不需要此設置

  3. 想不出任何其他用途。

  4. 您不能這樣做,因為外鍵約束會失敗。


查看完整回答
反對 回復 2019-08-23
  • 3 回答
  • 0 關注
  • 1335 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號