2012-12-18 90 views
3

我正在創建一個聯繫人管理系統,用於記錄公司的聯繫人詳細信息,聯繫人,活動,公司提交的提案以及捐款。SQL刪除與級聯

一家公司可以有許多聯繫人,可以在許多廣告系列中提交很多提案,並且可以爲多個廣告系列捐款。公司不需要有聯繫人,提交任何建議並提供任何捐贈。我已經成功地使用INSERT,UPDATE和SELECT進行查詢,但沒有刪除。現在,我使用這個查詢來刪除公司及其所有相關數據:

DELETE organizations.*, contactdetails.*, proposalorg.*, donationorg.* 
FROM organizations, contactdetails, proposalorg, donationorg 
WHERE idOrg='$id' AND 
contactdetails.company_id=organizations.idOrg AND 
proposalorg.company_id=organizations.idOrg AND 
donationorg.company_id=organizations.idOrg 

我知道它不會刪除該公司是否有與此查詢任何錯誤。我已閱讀關於DELETE CASCADE作爲更好的選項,但我不知道如何去做。如果任何人有任何想法如何做到這一點,我會非常感激。

回答

2

使用級聯刪除,你需要有表之間的外鍵約束。

ALTER TABLE contactdetails ADD 
CONSTRAINT FK_contactdetails_company_id FOREIGN KEY (company_id) 
REFERENCES organizations (idOrg) 
ON DELETE CASCADE 

這將告訴分貝,當行從組織表中刪除,如果在contactdetails引用它的任何行:定義外鍵的時候,像這樣你就建立了級聯刪除規則,那些也應該刪除。

至於這是不是一個好主意 - 這是一個意見問題。就我個人而言,我不喜歡使用它們,因爲它太容易意外刪除可能不想刪除的大量數據。但其他人會不同意我相信。

+0

謝謝,@Eric Petreolje!謝謝你的建議。我將在下一次瞭解更多關於其他DELETE查詢的知識,但是這次我將使用DELETE CASCADE。由於系統具有「導出爲ex​​cel」功能,我不認爲這應該是一個關於刪除數據的大問題。再次感謝! – mella

0

您使用「刪除級聯」和外鍵約束。外鍵約束通常放置在外部標識符上,這些標識符用於連接多個表。

將外鍵約束與級聯一起使用時,只能從主表中刪除,不要使用表連接,就像在示例中一樣。

您可以顯示錶結構定義的重要部分嗎?

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

+0

是的@Adder,我正在使用DELETE CASCADE,我剛剛嘗試過它,它的工作原理!謝謝你花時間陪伴我。 – mella