Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cập nhật nhiều hàng nguyên tử với một ràng buộc duy nhất

Với PostgreSQL, điều này chỉ có thể được giải quyết theo cách "tốt đẹp" bằng cách sử dụng Phiên bản 9.0 vì bạn có thể xác định các ràng buộc duy nhất có thể hoãn lại ở đó.

Với PostgreSQL 9.0, bạn chỉ cần thực hiện:

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;

Sau đó, cập nhật đơn giản như sau:

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;

Chỉnh sửa:
Nếu bạn không muốn bận tâm đến việc đặt ràng buộc hoãn lại trong giao dịch của mình, bạn có thể chỉ cần xác định ràng buộc là 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. Nhiều bản sao chính cho một nô lệ duy nhất trong Mysql

  2. Muốn lưu trữ đối tượng trong cơ sở dữ liệu MySQL

  3. Lỗi cú pháp:WITH không phải là đầu vào hợp lệ ở vị trí này

  4. Khai báo biến trong Bash?

  5. MySQL cách nối các bảng trên hai trường