MySQL中超类型与子类型1:1关系的间接ON DELETE CASCADE问题
答案:不会间接删除对应的super_type记录
咱们来拆解一下每个外键的ON DELETE CASCADE规则到底是怎么生效的,就能明白为什么不会影响到super_type了:
sub_type.super_type_id的CASCADE规则:这个是单向触发的——只有当super_type中的某条记录被删除时,数据库才会自动删除sub_type中关联这条super_type的记录。反过来,sub_type记录的删除不会触发super_type的任何操作,因为外键的约束方向是从父表(super_type)指向子表(sub_type)的。sub_type.other_table_id的CASCADE规则:这条规则的触发逻辑是——当other_table中的某条记录被删除时,数据库会自动删除sub_type中关联这条other_table记录的条目。
所以当你删除other_table的一条记录时,只会发生以下流程:
- 数据库找到所有
sub_type中other_table_id匹配这条被删记录的行,删除它们; - 到此为止,
super_type中的对应记录完全不受影响,因为没有任何规则会因为sub_type的删除去触发super_type的删除操作。
简单总结:ON DELETE CASCADE是单向触发的,只有父表的删除会带动关联的子表记录删除,子表的删除不会反向影响父表~
内容的提问来源于stack exchange,提问作者Martin Heralecký
相关产品推荐
相关产品推荐

