Нивото на изолация по подразбиране за InnoDB таблици е повтарящо се четене. Когато това ниво на изолация е активно, получаваме следното поведение (цитат от:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
С други думи:бихте ли опитали да използвате първичния ключ в условието WHERE на SELECT? Така например вместо:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Опитайте:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
в случай че id е първичният ключ. Всяка друга колона с уникален индекс ще работи също. Когато използвате неуникални колони във вашата клауза WHERE, InnoDB ще заключи диапазон от редове.