2014-12-26 37 views
3

我正在使用PHP Laravel Framework,但它是一個普通的PHP問題。在刪除級聯上使用MySQL外鍵關係刪除相關行安全嗎?或者是在PHP中執行它的最佳做法?我發現級聯繫統真的很好,但不知道使用它是否安全?任何最佳實踐?是否安全依靠MySQL Cascade進行刪除

例如,如果您的用戶已創建帖子並且該用戶被刪除,您是否使用PHP刪除了他的帖子,然後刪除該用戶,或者只是使用級聯?

感謝您的反饋。

+6

我會想象你可以依靠級聯效應。這就像問你是否可以依靠在SQL中使用'DELETE'語法。我認爲你唯一需要擔心的是級聯刪除的效果。您可能會突然發現從您的數據庫中刪除了意外的行。例如:從產品表中刪除產品時,也會突然刪除發票訂單表中​​的項目。 – Crackertastic

+1

你絕對應該依靠外鍵而不是自己在應用程序中做同樣的事情。 – tsnorri

+1

是的,你可以做到這一點,但如果決定切換到另一個不同於MySQL的存儲引擎,並且可能不支持該功能(像Mongo,Maria這樣的db),你將不得不重寫大量的存儲迭代。所以如果你關心切換到另一個數據庫存儲的可能性,那麼**,然後NO,在服務器端語言**上實現它,否則你可以繼續使用CASCADE。並且,瞭解** Data Mapper **模式,它應該在此處使用。 – Yang

回答

3

是的,你可以依靠CASCADE刪除。如果您使用ON DELETE CASCADE定義關係,foriegn行肯定會被刪除。使用ON DELETE CASCADE肯定是推薦的(假設你想刪除相關的行),它比在應用程序中實現刪除級聯更可靠。

在您給出的示例中,包含用戶帖子的行與使用具有ON DELETE CASCADE的外鍵的用戶相關。在這種情況下,您只需刪除該用戶。 MySQL將遵循所有的關係並刪除所有相關的行。這將防止孤立的數據。就孤兒數據的潛力而言,通過應用程序執行此操作會「風險更大」。

但請記住,如果與相同數據存在其他關係(例如,有與要刪除的用戶帖子有關的回覆帖子),則可以阻止刪除,因爲回覆中的引用排會搖晃。當然,這完全取決於您的數據庫設計以及如何設置外鍵。

相關問題