Domyślny poziom izolacji dla tabel InnoDB to odczyt powtarzalny. Gdy ten poziom izolacji jest aktywny, otrzymujemy następujące zachowanie (cytat z:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Innymi słowy:czy możesz spróbować użyć klucza podstawowego w warunku WHERE polecenia SELECT? Na przykład zamiast:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Wypróbuj:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
w przypadku id jest kluczem podstawowym. Każda inna kolumna z unikalnym indeksem też by działała. Używając nieunikalnych kolumn w klauzuli WHERE, InnoDB zablokuje zakres wierszy.