Ya, Anda mengunci semua baris dalam tabel ketika Anda memiliki kondisi pada kolom yang tidak diindeks seperti user_id
.
Kunci berlaku untuk semua baris yang "diperiksa". Kondisi Anda WHERE user_id = <user_id>
harus memeriksa semua baris dalam tabel, dan uji satu per satu untuk melihat apakah mereka cocok dengan nilai <user_id>
.
Kedua kueri memeriksa seluruh rangkaian baris, meskipun mereka mencari nilai spesifik yang berbeda dari <user_id>
, jadi mereka berkonflik.
Jika Anda memiliki indeks pada user_id
kolom, maka MySQL akan menggunakan indeks itu untuk menemukan baris yang cocok terlebih dahulu, kemudian hanya baris yang cocok yang akan menjadi baris yang diperiksa, dan karena itu akan dikunci.
Ini tidak ada hubungannya dengan tingkat isolasi transaksi. Jenis penguncian ini terjadi di semua tingkat isolasi transaksi.