在 PostgreSQL 中,我有一个表一个,另一个表两个。在两者中都有一些 id 列,并且 one.id 上存在一个引用 two.id 的外键。我想要做的是以这样的方式删除表 two , one 中的所有行都将其id设置为null。
问题是我不想修改表本身的内容,只修改结构。我想把提到的外键设置为在删除时设置为null,然后从两个中删除所有行,最后删除两个(级联),但问题是,我不知道约束的名称,所以它需要使用一些高级操作来解决它,我想避免。 我无法直接访问数据库,我所能做的就是对它执行查询。特别是我不能只检查外键的名称。
所以我的问题是 - 有一种简单,快捷的方法吗?
答案 0 :(得分:0)
时存在外键
one.id
引用two.id
在这种情况下,one
的每一行都有一个id
已经NULL
或者您要设置NULL
。 FK约束意味着该列的非NULL
值不是表id
行的two
。
我想要做的是以这样的方式删除表格
two
,one
中的所有行的ID都设置为null
。
那么
出了什么问题UPDATE one set id = NULL
?如果没有WHERE
子句,则所有行都将受到影响。或者,如果您对此不满意,请使用WHERE id IS NOT NULL
。
显然,如果one.id
是表one
的PK,那么它将不起作用,如果它是多列PK的一列,或者等等,可能不会,但在其中任何一列在任何情况下,无论你怎么做,你打算做什么都不行。