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