sql >> Database teknologi >  >> RDS >> PostgreSQL

Skift (opdater) unikke kolonneværdier i PostgreSQL

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)



  1. Køre 2 forespørgsler på samme tid på Oracle SQL Developer?

  2. Mysql INSERT IGNORE hvis der allerede eksisterer særlige rækkeværdier i to kolonner

  3. Vis null for kolonne, hvis ingen række findes

  4. Hvordan ændrer jeg min eksisterende tabel for at oprette en områdepartition i Oracle