Het standaard isolatieniveau voor InnoDB-tabellen is herhaalbaar gelezen. Wanneer dit isolatieniveau actief is, krijgen we het volgende gedrag (citaat van:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Met andere woorden:zou je kunnen proberen de primaire sleutel te gebruiken in de WHERE-voorwaarde van de SELECT? Dus bijvoorbeeld in plaats van:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Probeer:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
voor het geval id de primaire sleutel is. Elke andere kolom met een unieke index erop zou ook werken. Bij gebruik van niet-unieke kolommen in uw WHERE-clausule zal InnoDB een reeks rijen vergrendelen.