繁体   English   中英

带有两个外键的 MySQL 级联删除

[英]MySQL cascade delete with two foreign keys

我有三个这样的表:

create table parent (  
    key1 not null  
    key2 not null  
    primary key (key1, key2)  
) engine=innodb;

create table child (  
    name  
    key1 not null  
    key2 not null  
    key3 not null  
    primary key (key1, key2, key3),  
    foreign key (key1) references parent(key1) on delete cascade,  
    foreign key (key2) references parent(key2) on delete cascade  
) engine=innodb;  

create table child_denormalization (  
    key1 not null  
    key2 not null  
    key3 not null  
    primary key (key1, key2, key3),  
    foreign key (key1) references child(key1) on delete cascade,  
    foreign key (key2) references child(key2) on delete cascade,  
    foreign key (key3) references child(key3) on delete cascade  
) engine=innodb;

现在,父表行由 key1 和 key2 唯一标识,但是多行可能具有相同的 key1 或 key2 值,但不能同时具有相同的值。

当我从父表中删除一行时,即使 key2 不同,子表中与被删除行具有相同 key1 值的所有行都会被删除。

如果所有外键都与删除的行匹配,有没有办法只删除级联?

我尝试删除“删除级联”,而是在删除父级之前添加触发器以手动删除子级中的行,但我仍然在 child_key1 上收到外键约束错误。

您可以定义复合外键,而不是单独定义它们:

create table parent (  
    key1 not null  
    key2 not null  
    primary key (key1, key2)  
) engine=innodb;

create table child (  
    name  
    key1 not null  
    key2 not null  
    key3 not null  
    primary key (key1, key2, key3),  

    -- composite foreign key instead of individual keys
    foreign key (key1, key2) references parent(key1, key2) on delete cascade 

) engine=innodb;  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM