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.