Ако зададете нивото на изолация на транзакциите на 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