sql >> Databasteknik >  >> RDS >> Mysql

Atomic multi-row uppdatering med en unik begränsning

Med PostgreSQL kan detta bara lösas på ett "snyggt" sätt med version 9.0 eftersom du kan definiera unika begränsningar som ska kunna skjutas upp där.

Med PostgreSQL 9.0 gör du helt enkelt:

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;

Då är uppdateringen så enkel som denna:

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;

Redigera:
Om du inte vill bry dig om att ställa in begränsningen till uppskjuten i din transaktion, kan du helt enkelt definiera begränsningen som initially deferred .



  1. Psql lista alla tabeller

  2. Hur får man aktuellt datum och tid i MySQL?

  3. Mysql radera med subquery

  4. RODBC Temporary Table Issue vid anslutning till MS SQL Server