Dies ist in der Tat etwas verwirrend, da alle anderen Einschränkungen auf Anweisungsebene ausgewertet werden, während DML-Operationen nur PK/eindeutige Einschränkungen auf Zeilenebene ausgewertet werden.
Aber Sie können das umgehen, indem Sie die Primärschlüssel-Einschränkung als aufschiebbar deklarieren:
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;
Verzögerte Einschränkungen haben einen gewissen Overhead, also indem Sie sie als initially immediate
definieren dieser Overhead wird auf ein Minimum beschränkt. Sie können die Constraint-Evaluierung verschieben, wenn Sie sie benötigen, indem Sie set constraint
verwenden .
Die eigentliche Frage ist jedoch:Warum sollten Sie dies für einen Primärschlüsselwert tun? Die PK-Werte haben keinerlei Bedeutung, daher erscheint es eher unnötig, alle Werte zu erhöhen (unabhängig vom verwendeten DBMS)