Dette er faktisk lidt forvirrende, da alle andre begrænsninger evalueres på et sætningsniveau, kun PK/unik begrænsning evalueres på et niveau pr. række under DML-operationer.
Men du kan omgå det ved at erklære den primære nøglebegrænsning som udskydelig:
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;
Udskudte begrænsninger har nogle overhead, så ved at definere det som initially immediate
denne overhead holdes på et minimum. Du kan udsætte begrænsningsevalueringen, når du har brug for den ved at bruge set constraint
.
Det virkelige spørgsmål er imidlertid:hvorfor skulle du gøre dette på en primær nøgleværdi? PK-værdierne har ingen som helst betydning, så det virker ret unødvendigt at øge alle værdier (uanset hvilken DBMS der bruges)