3

我正在创建一个联系人管理系统,记录公司的联系方式、联系人、活动、公司提交的提案和捐赠。

一家公司可以有许多联系人,可以在许多活动中提交许多提案,并且可以为许多活动捐款。公司不需要有联系人,不需要提交任何提案,也不需要捐赠。我已经成功地使用 INSERT、UPDATE 和 SELECT 进行了查询,但没有使用 DELETE。现在我正在使用这个查询来删除一家公司及其所有相关数据:

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 作为更好的选择,但我不知道该怎么做。如果有人对如何做到这一点有任何想法,我将不胜感激。

4

2 回答 2

2

要使用级联删除,您需要在表之间具有外键约束。您将在定义外键时设置级联删除规则,如下所示:

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

这将告诉数据库,当从组织表中删除一行时,如果 contactdetails 中有任何行引用它,那么这些行也应该被删除。

至于这是否是一个好主意 - 这是一个见仁见智的问题。就个人而言,我不喜欢使用它们,因为它很容易意外删除大量您可能不打算删除的数据。但我敢肯定,其他人会不同意。

于 2012-12-18T14:34:53.387 回答
0

您将“on delete cascade”与外键约束一起使用。外键约束通常放在外部 id 上,这些是您用来连接多个表的 id。

当您将外键约束与级联一起使用时,您只从主表中删除并且不使用表连接,就像在您的示例中一样。

你能展示你的表结构定义的重要部分吗?

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

于 2012-12-18T14:33:43.343 回答