Да, заключвате всички редове в таблицата, когато имате условие за неиндексирана колона като user_id
.
Ключалките се прилагат за всички "изследвани" редове. Вашето условие WHERE user_id = <user_id>
трябва да разгледа всички редовете в таблицата и ги тествайте един по един, за да видите дали съвпадат със стойността на <user_id>
.
И двете заявки изследват целия набор от редове, въпреки че търсят различни специфични стойности на <user_id>
, така че те са в конфликт.
Ако сте имали индекс на user_id
колона, тогава MySQL ще използва този индекс, за да намери първо съвпадащите редове, след което само съвпадащите редове ще станат проверени редове и следователно ще бъдат заключени.
Това няма нищо общо с нивото на изолация на транзакциите. Тези видове заключвания се срещат във всички нива на изолация на транзакциите.