Câu trả lời là trình kích hoạt không an toàn .
Nó chỉ ra rằng trình kích hoạt thực sự không nhìn thấy các thay đổi không giới hạn được thực hiện trong các giao dịch khác và vượt qua mà không có lỗi. Nó có thể được chứng minh như thế này
Giao dịch 1:
START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,1); -- query A
Giao dịch 2:
START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,2); -- query B; in conflict with A, but passses
Cả hai giao dịch:
COMMIT;
Bây giờ plays_in
sẽ chứa cả hai bản ghi được chèn vào mặc dù nếu A và B được thực thi trong một giao dịch duy nhất, trình kích hoạt sẽ gây ra lỗi.
Toàn bộ nguồn mẫu có thể được cung cấp tại đây