微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除行,将外键引用设置为其他

如何解决删除行,将外键引用设置为其他

我经常想对表a进行某种“合并”,b引用了该表,例如:

UPDATE b SET a=1 WHERE a=2;
DELETE FROM a WHERE id=2;

a的行id=2合并到id=1中,更新指向它的外键,而不是级联删除


说明:12只是一个示例,在特定情况下,可能需要(3 & 6)(10 & 27)(10 & 42) “合并”。再有一天可能还会更多。


这有点麻烦,尤其是当有多个带有外键进入a的表时。有没有更方便的方式来处理此问题?我在想像这样的东西:

--PSEUDOCODE NOT VALID sql
DELETE FROM a WHERE id=2 ON FKVIOLATION SET fk=1;

解决方法

有。您可以为外键设置默认值,并在FK约束中使用ON CASCADE SET DEFAULT

以您的示例为例,其中b.a是引用a.id的外键,并且您要将孤立FK设置为​​1:

ALTER TABLE b ALTER a SET DEFAULT 1;
ALTER TABLE b DROP CONSTRAINT fk_whatever,ALTER TABLE b ADD FOREIGN KEY (a) REFERENCES id ON CASCADE SET DEFAULT;

这会将孤儿外键设置为外键设置的任何默认值。唯一不起作用的方法是,如果您已经为其他内容使用了不同的默认值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。