Dit is inderdaad een beetje verwarrend omdat alle andere beperkingen worden geëvalueerd op instructieniveau, en alleen PK/unieke beperkingen worden geëvalueerd op rijniveau tijdens DML-bewerkingen.
Maar u kunt dat omzeilen door de primaire sleutelbeperking als uitstelbaar te verklaren:
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;
Uitgestelde beperkingen hebben enige overhead, dus door het te definiëren als initially immediate
deze overhead wordt tot een minimum beperkt. U kunt de evaluatie van de beperking uitstellen wanneer u deze nodig heeft met behulp van set constraint
.
De echte vraag is echter:waarom zou je dit op een primaire sleutelwaarde moeten doen? De PK-waarden hebben geen enkele betekenis, dus het lijkt nogal onnodig om alle waarden te verhogen (ongeacht het DBMS dat wordt gebruikt)