2011-12-28 96 views
6

我在我的數據庫中有兩個表:'故事'和'votes'。
故事表格包含有關文章的所有信息(例如標題,正文,作者姓名等)。 表包含所有文章的所有投票。有一個字段在被稱爲item_name其中包含id投票的文章。如何從不同的MySQL表中刪除所有相關記錄

在簡單的話,ITEM_NAME是在故事(取決於哪個物品的用戶投票)等於ID

問題是:如果一篇文章被刪除,我該如何自動刪除與該文章相關的表中的所有記錄?

它可以設置在數據庫本身,所以沒有必要設置額外的PHP查詢?

這裏是我的數據庫的結構:

故事

enter image description here


enter image description here

+0

如果您設置了FK關係,請查看[ON DELETE CASCADE](http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html)。如果您沒有設置FK關係,則需要手動刪除投票數據。 –

回答

6

MySQL有不同的存儲引擎。在大多數管理IDE的MySQL中,默認存儲引擎是MyISAM。如果您爲表使用此存儲引擎,則不能在其列之間創建任何關係,而必須自行刪除相關列。

對於你想要的,innoDB是最好的解決方案。這種類型的存儲引擎會使情況在不同表格的列之間建立關係。您將需要主鍵和外鍵在表格和創建這些關係後,你必須指定下面這些特點:

ON UPDATE CASCADEON DELETE CASCADE

所以你不會需要刪除後刪除相關列中的值主要記錄。

看看this link來比較它們的基準測試。

+0

現在的投票表是innoDB類型,它們都必須是相同的類型還是會工作正確? – Ilja

+0

@IlyaKnaup,是的,他們都需要使用InnoDB才能工作。 –

+0

此外,你需要創建他們的關係,否則你不能實現你的目標只是將它們設置爲InnoDB –

2

建立在相關領域的外鍵與級聯刪除。

也許有人會給你一個更詳細的答案,但你必須使用支持外鍵的引擎(如InnoDB),如果你不知道如何做,PHPMyAdmin應該幫助你它手工。

簡單地說,設置級聯刪除字段會告訴您的數據庫刪除每個具有該限制的記錄,在您的情況下,刪除該文章(在另一個表上)。

在這裏看到更多的信息:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

http://forums.digitalpoint.com/showthread.php?t=488163

相關問題