Výchozí úroveň izolace pro tabulky InnoDB je opakovatelné čtení. Když je tato úroveň izolace aktivní, dochází k následujícímu chování (citace:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Jinými slovy:mohli byste zkusit použít primární klíč v podmínce WHERE SELECT? Takže například místo:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Zkuste:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
v případě, že id je primární klíč. Fungoval by i jakýkoli jiný sloupec s jedinečným indexem. Při použití nejedinečných sloupců v klauzuli WHERE InnoDB uzamkne řadu řádků.