增加所有行的FK列值SQL

问题描述:

正如我的标题所说,我想在SQL中增加表中所有行的列值。增加所有行的FK列值SQL

假设我在tab_a有这些数据和PK是:fk_afk_bfk_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)。

我该如何做到这一点?

+1

删除唯一约束。进行更改。将约束添加回来。 –

+0

请将表格的数据定义添加到您的问题中。顺便说一句:也许你需要延期约束。 BTW2:改变主键(或唯一键/候选键)的值通常是一个坏主意,不管怎样,为什么*是唯一的? – joop

+0

向我们展示两个表格定义。 – jarlh

的主键应该是缓征最初推迟:

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)