sql >> Database teknologi >  >> RDS >> Mysql

Atomic multi-row opdatering med en unik begrænsning

Med PostgreSQL kan dette kun løses på en "pæn" måde ved hjælp af Version 9.0, fordi du kan definere unikke begrænsninger, der skal udskydes der.

Med PostgreSQL 9.0 gør du blot:

create table label (
  id_label serial not null,
  rank integer not null,
  title text not null,
  constraint pri primary key (id_label)
);
alter table label add constraint unique_rank unique (rank) 
      deferrable initially immediate;

Så er opdateringen så enkel som denne:

begin;
set constraints unique_rank DEFERRED;
update rank
   set rank = case when rank = 20 then 10 else 20 end
   where id_label in (1,2);
commit;

Rediger:
Hvis du ikke vil bekymre dig om at indstille begrænsningen til udskudt i din transaktion, kan du blot definere begrænsningen som initially deferred .



  1. MySQL:Vælg alle datoer i et interval, selvom der ikke er nogen registreringer til stede

  2. Sådan indsætter du en mikrosekund-præcision datetime i mysql?

  3. MariaDB JSON_UNQUOTE() Forklaret

  4. Er lagring af tællinger af databaseposter overflødig?