增加所有行的FK列值SQL
问题描述:
正如我的标题所说,我想在SQL中增加表中所有行的列值。增加所有行的FK列值SQL
假设我在tab_a
有这些数据和PK
是:fk_a
和fk_b
和fk_c
:
|fk_a|fk_b|fk_c|
|1 |2 |2 |
|1 |2 |3 |
如果我做了以下更新语句:
update tab_a
set fk_c = fk_c + 1
我的查询会抱怨说,数据(1,2,3)已经存在,但它不应该抱怨,因为我将更新每一行,因此行(1,2,3)应该变为(1,2,4)。
我该如何做到这一点?
答
的主键应该是缓征最初推迟:
create table tab_a(
fk_a int,
fk_b int,
fk_c int,
primary key (fk_a, fk_b, fk_c) deferrable initially deferred
);
insert into tab_a values
(1, 2, 3),
(1, 2, 4);
update tab_a
set fk_c = fk_c + 1
returning *;
fk_a | fk_b | fk_c
------+------+------
1 | 2 | 4
1 | 2 | 5
(2 rows)
删除唯一约束。进行更改。将约束添加回来。 –
请将表格的数据定义添加到您的问题中。顺便说一句:也许你需要延期约束。 BTW2:改变主键(或唯一键/候选键)的值通常是一个坏主意,不管怎样,为什么*是唯一的? – joop
向我们展示两个表格定义。 – jarlh