Ако зададете нивото на изолация на транзакциите на SERIALIZABLE
, InnoDB
wil implicity append LOCK IN SHARE MODE
до всички SELECT
изявления.
Този режим е в конфликт с заключванията, поставени от SELECT FOR UPDATE
и SELECT
s ще се заключи.
Имайте предвид обаче, че InnoDB
може да заключи повече редове, отколкото да удовлетвори WHERE
състояние. Това е така, защото заключва всички сканирани редове , не само тези съвпадащи .
Да речем, че имате индекс на col1
и тази заявка:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
използва този индекс.
Това ще заключи всички записва с col1 = 1
, дори тези с col2 <> 2