我正在创建一个联系人管理系统,记录公司的联系方式,联系人,活动,公司提交的提案以及捐赠。
一家公司可以拥有多个联系人,可以在多个广告系列中提交许多提案,并可以为许多广告系列捐款。公司不需要联系人,提交任何提案并进行任何捐赠。我已成功使用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作为更好的选择,但我不知道该怎么做。如果有人知道如何做到这一点,我会非常感激。
答案 0 :(得分:2)
要使用级联删除,您需要在表之间使用外键约束。您可以在定义外键时设置级联删除规则,如下所示:
ALTER TABLE contactdetails ADD
CONSTRAINT FK_contactdetails_company_id FOREIGN KEY (company_id)
REFERENCES organizations (idOrg)
ON DELETE CASCADE
这会告诉db,当从organization表中删除一行时,如果contactdetails中有任何引用它的行,那么也应该删除它们。
至于这是否是一个好主意 - 这是一个意见问题。就个人而言,我不喜欢使用它们,因为它太容易意外删除许多你可能不打算删除的数据。但是其他人不同意我确定。
答案 1 :(得分:0)
您使用“on delete cascade”和外键约束。外键约束通常放在外部ID上,这些是用于连接多个表的ID。
当您将外键约束与cascade一起使用时,只能从主表中删除而不使用表连接,如示例中所示。
您能否显示表结构定义的重要部分?
请参阅http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html