Tingkat isolasi default untuk tabel InnoDB adalah pembacaan berulang. Saat level isolasi ini aktif, kami mendapatkan perilaku berikut (kutipan dari:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Dengan kata lain:dapatkah Anda mencoba menggunakan kunci utama dalam kondisi WHERE dari SELECT? Jadi misalnya alih-alih:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Coba:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
jika id adalah kunci utama. Kolom lain dengan indeks unik di atasnya juga akan berfungsi. Saat menggunakan kolom non-unik dalam klausa WHERE Anda, InnoDB akan mengunci rentang baris.