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

Bagaimana cara memastikan tidak ada kondisi balapan di database MySQL saat menambah bidang?

Berikut 3 pendekatan berbeda:

Pembaruan atom

update table set tries=tries+1 where condition=value;

dan itu akan dilakukan secara atom.

Gunakan transaksi

Jika Anda perlu memilih nilai terlebih dahulu dan memperbaruinya di aplikasi Anda, Anda mungkin perlu menggunakan transaksi. Itu berarti Anda harus menggunakan InnoDB, bukan tabel MyISAM. Permintaan Anda akan seperti:

BEGIN; //or any method in the API you use that starts a transaction
select tries from table where condition=value for update;
.. do application logic to add to `tries`
update table set tries=newvalue where condition=value;
END;

jika transaksi gagal, Anda mungkin perlu mencobanya kembali secara manual.

Skema versi

Pendekatan umum adalah memperkenalkan kolom versi di tabel Anda. Kueri Anda akan melakukan sesuatu seperti:

select tries,version from table where condition=value;
.. do application logic, and remember the old version value.
update table set tries=newvalue,version=version + 1 where condition=value and version=oldversion;

Jika pembaruan itu gagal/mengembalikan 0 baris yang terpengaruh, orang lain telah memperbarui tabel untuk sementara waktu. Anda harus memulai dari awal - yaitu, pilih nilai baru, lakukan logika aplikasi, dan coba perbarui lagi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hasilkan baris kosong meskipun kosong di antara 2 tanggal

  2. Bagaimana cara memilih baris yang dikelompokkan dengan hanya nilai NULL?

  3. MySQL pilih di mana kolom tidak kosong

  4. Apa Option=N di string koneksi MySQL ODBC?

  5. MySQL menonaktifkan semua pemicu