Wenn Sie die Transaktionsisolationsstufe auf SERIALIZABLE setzen , InnoDB wil LOCK IN SHARE MODE implizit anhängen an alle SELECT Aussagen.
Dieser Modus steht im Konflikt mit den Sperren, die durch SELECT FOR UPDATE gesetzt wurden und das SELECT s wird gesperrt.
Beachten Sie jedoch, dass InnoDB kann mehr Zeilen sperren, als WHERE erfüllen Zustand. Dies liegt daran, dass alle gescannten Zeilen gesperrt werden , nicht nur die übereinstimmenden .
Angenommen, Sie haben einen Index auf col1 und diese Abfrage:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
verwendet diesen Index.
Dadurch werden alle gesperrt Datensätze mit col1 = 1 , auch solche mit col2 <> 2