使用外键从表中删除

时间:2012-05-15 18:25:36

标签: mysql sql foreign-keys foreign-key-relationship

上午,

我有三张桌子:

表:债务人

id           -    INT(11)
type         -    ENUM('c', 'p')

表:公司

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for companies

表:private_individuals

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for private individuals

公司的外国KEY SQL(同样用于私人):

INDEX `fk_private_individual_debtors1` (`debtor_id` ASC) ,
  CONSTRAINT `fk_private_individual_debtors1`
    FOREIGN KEY (`debtor_id` )
    REFERENCES `application_user`.`debtors` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)

当我删除公司或私人时,我希望债务人也被删除,并且它应该反过来(删除债务人,公司或私人个人也被删除)。

我想用触发器来做这件事,但我想有更好的方法可以做到这一点..

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

  

删除债务人,并删除公司或个人   好:

这可以通过ON DELETE CASCADE来完成。您在定义外键时指定它,并应用于表上的所有删除。你不能在单独的DELETE级别提到这一点。请参阅MySql手册中的FOREIGN KEY Constraints 请记住,在大多数情况下这很危险,最好在应用程序代码中使用此逻辑。

  

当我删除公司或私人时,我想要债务人   删除

这不是直接可行的。您已在公司与债务人之间建立了外键关系,但可能有多个公司与债务人相关联。外键中没有任何东西可以防止这种情况发生。您可能有其他应用程序逻辑(在过程中,在java / C#代码中,在触发器中)但外键级别根本没有任何内容。 因此,由于这是通过其他应用程序逻辑实现的,因此删除也需要额外的应用程序逻辑。 另外需要注意的一点是:您应该删除[仅当所有子记录都被删除时才会删除。