Standardisoleringsnivån för InnoDB-tabeller är repeterbar läsning. När denna isoleringsnivå är aktiv får vi följande beteende (citat från:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Med andra ord:kan du försöka använda primärnyckeln i WHERE-villkoret för SELECT? Så till exempel istället för:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Försök:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
om id är den primära nyckeln. Alla andra kolumner med ett unikt index skulle också fungera. När du använder icke-unika kolumner i din WHERE-sats kommer InnoDB att låsa en rad rader.