2016-08-01 12 views
1

私のタイトルによると、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

2つの表定義を表示します。 – jarlh

答えて

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) 
関連する問題