Điều này thực sự hơi khó hiểu vì tất cả các ràng buộc khác đều được đánh giá ở cấp độ câu lệnh, chỉ có ràng buộc PK / duy nhất được đánh giá ở cấp độ mỗi hàng trong các hoạt động DML.
Nhưng bạn có thể giải quyết vấn đề đó bằng cách khai báo ràng buộc khóa chính là có thể hoãn lại:
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;
Ràng buộc hoãn lại có một số chi phí, vì vậy bằng cách xác định nó là initially immediate
chi phí này được giữ ở mức tối thiểu. Bạn có thể trì hoãn đánh giá ràng buộc khi bạn cần bằng cách sử dụng set constraint
.
Tuy nhiên, câu hỏi thực sự là:tại sao bạn cần làm điều này trên một giá trị khóa chính? Giá trị PK không có ý nghĩa gì, vì vậy có vẻ như không cần thiết phải tăng tất cả các giá trị (bất kể DBMS đang được sử dụng)