如何在不使用级联的情况下从PostgreSQL表中删除行

3
假设我的应用程序有两个不同的表,其中一个参考另一个。同时定义了一个on delete cascade?我不想删除on delete cascade约束,但是有时我想从本地删除它,忽略级联语句,例如:
delete_without_cascade from table1 where id = id1

有没有一种方法可以实现这个?

那么你是想说当你从父表中删除时,你想要孤立的子记录,还是想知道如何轻松地先删除子记录?我不确定你想要什么。 - Scott Marlowe
1个回答

1
级联删除将会在删除父记录时删除子记录。如果您不想这样做,那么您必须对由FK约束绑定的列中的值进行操作,因为数据库模式不应允许记录具有孤立的值。如果该列允许null值,则在运行删除之前执行更新以将FK列值设置为null
如果没有级联,则在执行delete语句时通常会出现错误,因为其他表中会存在孤立的记录。
如果您还不理解Cascade on delete的工作原理,请注意它不会反向工作,即删除引用父表的记录不会导致父记录被删除。

实际上,我想让我的应用程序删除子节点,但是当我使用pgadmin进行某些修改时,我希望能看到有关子记录的错误。无论如何,据我所知,没有一种方式可以构建这样的查询。谢谢你的回答。 - kundante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接