Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pembaruan multi-baris atom dengan batasan unik

Dengan PostgreSQL, ini hanya dapat diselesaikan dengan cara yang "bagus" menggunakan Versi 9.0 karena Anda dapat menentukan batasan unik untuk ditangguhkan di sana.

Dengan PostgreSQL 9.0 Anda cukup melakukan:

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;

Maka pembaruannya sesederhana ini:

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;

Sunting:
Jika Anda tidak ingin repot mengatur batasan untuk ditangguhkan di dalam transaksi Anda, Anda cukup mendefinisikan batasan sebagai 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. Tambahkan 1 ke bidang

  2. Kinerja operator MySQL IN pada jumlah nilai (besar?)

  3. Server Ruby on Rails tidak dapat dijalankan:dyld:lazy simbol binding gagal:Simbol tidak ditemukan:_mysql_get_client_info

  4. Proses pembunuhan MySQL adalah pengguna tidak mendapat cukup poin PHP

  5. Mengekspor database melalui kode java saya