如何解决删除行,将外键引用设置为其他
我经常想对表a
进行某种“合并”,b
引用了该表,例如:
UPDATE b SET a=1 WHERE a=2;
DELETE FROM a WHERE id=2;
将a
的行id=2
合并到id=1
中,更新指向它的外键,而不是级联删除。
说明:1
和2
只是一个示例,在特定情况下,可能需要(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 举报,一经查实,本站将立刻删除。