上午,
我有三张桌子:
表:债务人
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)
当我删除公司或私人时,我希望债务人也被删除,并且它应该反过来(删除债务人,公司或私人个人也被删除)。
我想用触发器来做这件事,但我想有更好的方法可以做到这一点..
有人可以帮忙吗?
答案 0 :(得分:1)
删除债务人,并删除公司或个人 好:
这可以通过ON DELETE CASCADE
来完成。您在定义外键时指定它,并应用于表上的所有删除。你不能在单独的DELETE级别提到这一点。请参阅MySql手册中的FOREIGN KEY Constraints
请记住,在大多数情况下这很危险,最好在应用程序代码中使用此逻辑。
当我删除公司或私人时,我想要债务人 删除
这不是直接可行的。您已在公司与债务人之间建立了外键关系,但可能有多个公司与债务人相关联。外键中没有任何东西可以防止这种情况发生。您可能有其他应用程序逻辑(在过程中,在java / C#代码中,在触发器中)但外键级别根本没有任何内容。 因此,由于这是通过其他应用程序逻辑实现的,因此删除也需要额外的应用程序逻辑。 另外需要注意的一点是:您应该删除[仅当所有子记录都被删除时才会删除。