簡體   English   中英

哪個先刪除? 主鍵還是外鍵?

[英]Which gets deleted first? Primary or Foreign key?

當我們刪除作為其他表中的外鍵的主鍵時,哪個首先被刪除? 第一個表中的主鍵還是另一個表中的外鍵? 面試中有人問我這個問題。 請也提供一些答案的原因:)

通常,您需要先刪除外鍵引用,然后再刪除主鍵。 否則,外鍵約束將無效。

我可能會猜測這是面試官正在尋找的答案。

但是,實際上,答案是“同時”。 完成此操作的通常方法是使用級聯刪除外鍵引用。 刪除操作將全部在同一事務中進行(至少在大多數數據庫中),因此它們直到提交才生效。

如果您手動執行此操作,則通常會執行以下操作:

  • 刪除外鍵約束。
  • 將列中的值重新設置為外鍵引用(通常為NULL )。
  • 刪除主鍵表中的相應行。

對我來說,這似乎是一個棘手的問題。

我的回答是兩者都不是,除非定義DELETE CASCADE約束,否則都會收到錯誤消息

在這種情況下,將首先刪除該PK的行引用。

直到FK記錄消失,才能刪除PK記錄。 這是具有這種關系的確切定義的一部分,也是具有FK關系的主要原因之一。 原因是您不想擁有不再具有父級的孤立子記錄,因此沒有任何意義。 這是數據完整性問題。

如果您嘗試刪除PK而沒有先刪除子記錄,則數據庫將給出錯誤。 級聯刪除可以通過先在后台刪除它們來隱藏它,但這在很多時候是很不好的事情,應該避免。 您不想隨意刪除子記錄,在許多情況下,子記錄的存在告訴您不應刪除父記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM