sql >> Database >  >> RDS >> Mysql

Atomic update met meerdere rijen met een unieke beperking

Met PostgreSQL kan dit alleen op een "leuke" manier worden opgelost met versie 9.0, omdat je unieke beperkingen kunt definiëren om daar uitgesteld te worden.

Met PostgreSQL 9.0 zou je gewoon doen:

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;

Dan is de update zo eenvoudig:

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;

Bewerken:
Als u niet de moeite wilt nemen om de beperking in te stellen op uitgesteld binnen uw transactie, kunt u de beperking eenvoudig definiëren als initially deferred .



  1. Hoe te BESTELLEN BY varchar veld als nummer?

  2. Hoe een mysql-query te schrijven om meerdere variabeleselecties te controleren waarbij het indienen van een formulier kan overeenkomen met 1 0f 5 velden

  3. Over mysql-cursor en iterator

  4. Wat doet DELIMITER // in een trigger?