Als u het transactie-isolatieniveau instelt op SERIALIZABLE , InnoDB wil implicie toevoegen LOCK IN SHARE MODE aan alle SELECT verklaringen.
Deze modus is in strijd met de vergrendelingen die zijn geplaatst door SELECT FOR UPDATE en de SELECT s worden vergrendeld.
Merk echter op dat InnoDB kan meer rijen vergrendelen dan voldoen aan de WHERE voorwaarde. Dit komt omdat het alle rijen vergrendelt gescand , niet alleen die overeenkomstig .
Stel, je hebt een index op col1 en deze vraag:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
gebruikt deze index.
Dit vergrendelt alle records met col1 = 1 , zelfs die met col2 <> 2