Hvis du indstiller transaktionsisolationsniveauet til SERIALIZABLE
, InnoDB
vil implicit tilføje LOCK IN SHARE MODE
til alle SELECT
udsagn.
Denne tilstand er i konflikt med låsene placeret af SELECT FOR UPDATE
og SELECT
s vil låse.
Bemærk dog, at InnoDB
kan låse flere rækker end opfylder WHERE
tilstand. Dette er fordi det låser alle scannede rækker , ikke kun de matchede .
Lad os sige, du har et indeks på col1
og denne forespørgsel:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
bruger dette indeks.
Dette låser alle poster med col1 = 1
, selv dem med col2 <> 2