To je skutečně trochu matoucí, protože všechna ostatní omezení jsou vyhodnocována na úrovni příkazů, pouze omezení PK/jedinečné jsou vyhodnocovány na úrovni řádků během operací DML.
Ale můžete to obejít tím, že deklarujete omezení primárního klíče jako odložitelné:
create table tbl_test
(
testkey INTEGER,
constraint pk_tbl_test primary key (testkey) deferrable initially immediate
);
insert into tbl_test values (1), (2);
set constraints all deferred;
update tbl_test
set testkey = testkey +1;
Odložená omezení mají určitou režii, takže pokud je definujete jako initially immediate
tato režie je omezena na minimum. Vyhodnocení omezení můžete odložit, když to potřebujete, pomocí set constraint
.
Skutečná otázka však zní:proč byste to měli dělat s hodnotou primárního klíče? Hodnoty PK nemají žádný význam, takže se zdá být spíše zbytečné zvyšovat všechny hodnoty (bez ohledu na použitý DBMS)