sql >> Databáze >  >> RDS >> Mysql

Atomová víceřadá aktualizace s jedinečným omezením

S PostgreSQL to lze vyřešit pouze "pěkným" způsobem pomocí verze 9.0, protože zde můžete definovat jedinečná omezení, která budou odložitelná.

S PostgreSQL 9.0 byste jednoduše udělali:

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;

Pak je aktualizace takto jednoduchá:

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;

Edit:
Pokud se nechcete obtěžovat nastavením omezení na odložené uvnitř transakce, můžete omezení jednoduše definovat jako initially deferred .



  1. Vytáhněte sloupce z odvozené tabulky a shrňte je do jednoho příkazu MySQL SELECT

  2. Datové modely

  3. java.math.BigInteger nelze přetypovat na java.lang.Integer

  4. Mohu kopírovat :STARÉ a :NOVÉ pseudozáznamy do/do uložené procedury Oracle?