增加所有行SQL的FK列值

时间:2016-08-01 12:24:44

标签: sql database postgresql

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

假设我在tab_aPK中有以下数据:fk_afk_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,3) )。

我如何做到这一点?

1 个答案:

答案 0 :(得分:2)

主键应该是可推迟的最终推迟:

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)