Mức cách ly mặc định cho bảng InnoDB là đọc lặp lại. Khi mức cô lập này hoạt động, chúng tôi nhận được hành vi sau (trích dẫn từ: https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):
Nói cách khác:bạn có thể thử sử dụng khóa chính trong điều kiện WHERE của SELECT? Vì vậy, ví dụ thay vì:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
Hãy thử:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;
trong trường hợp id là khóa chính. Bất kỳ cột nào khác có chỉ mục duy nhất trên đó cũng sẽ hoạt động. Khi sử dụng các cột không phải là duy nhất trong mệnh đề WHERE của bạn, InnoDB sẽ khóa một loạt các hàng.