Mysql 使用外键从表中删除

Mysql 使用外键从表中删除,mysql,sql,foreign-keys,foreign-key-relationship,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 表:个人 id - INT(11) debtor_id - INT(11) and a lot of othe

早上好

我有三张桌子:

表:债务人

id           -    INT(11)
type         -    ENUM('c', 'p')
表:公司

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for companies
表:个人

id           -    INT(11)
debtor_id    -    INT(11)
and a lot of other fields for private individuals
适用于公司的外键SQL(同样适用于个人):

当我删除一家公司或个人时,我希望债务人也被删除,它也应该以另一种方式工作(删除债务人,公司或个人也被删除)

我想用扳机来做这件事,但我想有更好的方法

有人能帮忙吗

删除债务人,公司或个人被删除为: 嗯:

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

当我删除公司或个人时,我希望债务人 也被删除了

这是不可能的。您已经在公司和债务人之间建立了外键关系,但可以有多个公司与债务人关联。外键中没有任何东西可以阻止此操作。您可能有额外的应用程序逻辑(在过程中、java/C代码中、触发器中),但在外键级别没有任何逻辑。 因此,由于这是通过附加的应用程序逻辑实现的,所以删除也需要附加的应用程序逻辑。
另一点需要注意的是:你应该删除[Aren]而不仅仅是删除其所有子记录。

这不是一个好主意。虽然删除债务人可能偶尔会发生,但我怀疑一家大型银行是否希望因为其一笔贷款被清偿而被消灭。删除债务人、公司或个人是不可能的(隐藏是…)在常规GUI中或与常规MySQL用户一起..因此不太可能发生错误单击或类似的错误..但是当公司被删除时,让债务人留下是不正确的,因为债务人是公司或个人。
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)