Mysql
 sql >> база данни >  >> RDS >> Mysql

Атомна многоредова актуализация с уникално ограничение

С PostgreSQL това може да бъде решено само по "приятен" начин, като се използва версия 9.0, защото можете да дефинирате уникални ограничения, които да бъдат отложени там.

С PostgreSQL 9.0 просто трябва да направите:

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;

Тогава актуализацията е толкова проста:

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;

Редактиране:
Ако не искате да се притеснявате да задавате ограничението на отложено във вашата транзакция, можете просто да дефинирате ограничението като initially deferred .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пролетна партида с псевдоним на колона като ключ за сортиране - неправилно формиран оператор where

  2. Грешка в MySQL-Linux при опит за спиране на услугата

  3. mysql REGEXP не съвпада

  4. Публикувайте и получавайте едновременно в php

  5. Бройте поява в таблицата PHP echo