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

Contoh minimal menggunakan pilih... untuk pembaruan untuk mengisolasi baris

SELECT ... FOR UPDATE mengunci baris dalam mode eksklusif, yang berarti pilihan kedua tidak dapat dilanjutkan sampai yang pertama selesai atau dibatalkan. Ini karena hasil pemilihan kedua dapat dipengaruhi oleh konten baris yang Anda kunci, sehingga perlu mendapatkan kunci baca ke baris untuk memeriksanya.

Jika Anda membuat UNIQUE INDEX pada misalnya id , Anda bisa melakukannya;

select * from SolrCoresPreallocated where id=1 for update;

pada transaksi pertama dan;

select * from SolrCoresPreallocated where id=2 for update;

di yang kedua secara independen, karena indeks unik memungkinkan pilihan kedua menemukan baris yang benar tanpa mengunci-baca yang pertama.

EDIT:Untuk mendapatkan baris "gratis" secepat mungkin, satu-satunya cara adalah melakukan dua transaksi;

  • MULAI/PILIH UNTUK UPDATE/UPDATE ke busy/COMMIT untuk mendapatkan baris.
  • MULAI//PERBARUI ke gratis/COMMIT untuk memproses baris dan melepaskannya.

Ini berarti bahwa Anda mungkin memerlukan tindakan kompensasi jika suatu proses gagal dan memutar kembali transaksi yang akan MEMPERBARUI baris menjadi gratis, tetapi karena MySQL (atau SQL standar dalam hal ini) tidak memiliki gagasan "dapatkan baris yang tidak terkunci berikutnya ", Anda tidak punya banyak pilihan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menampilkan catatan secara vertikal di baris perintah mysql?

  2. Bagaimana cara mengubah kata sandi akun root MySQL di CentOS7?

  3. Python, mysql.connector Error:Tidak Ada Hasil yang Disetel untuk Mengambil Dari; cgitb menunjukkan nilai yang benar yang diteruskan ke fungsi

  4. Kesalahan sintaks SQL saat membuat prosedur tersimpan di MySQL

  5. mysql -> masukkan ke tbl (pilih dari tabel lain) dan beberapa nilai default