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