Ano, zamykáte všechny řádky v tabulce, když máte podmínku pro neindexovaný sloupec, jako je user_id
.
Zámky se vztahují na všechny „zkoumané“ řádky. Vaše podmínka WHERE user_id = <user_id>
musí prověřit vše řádky v tabulce a otestujte je jeden po druhém, abyste zjistili, zda odpovídají hodnotě <user_id>
.
Oba dotazy zkoumají celou sadu řádků, i když hledají různé konkrétní hodnoty <user_id>
, takže jsou v konfliktu.
Pokud jste měli index na user_id
sloupec, pak by MySQL použil tento index k nalezení odpovídajících řádků nejprve, poté by se pouze odpovídající řádky staly prozkoumanými řádky, a proto by byly uzamčeny.
To nemá nic společného s úrovní izolace transakcí. Tyto typy zámků se vyskytují ve všech úrovních izolace transakcí.