Bạn đang sử dụng bảng InnoDB hoặc bảng MyISAM? MySQL không hỗ trợ các giao dịch trên bảng MyISAM (nhưng nó sẽ không báo lỗi cho bạn nếu bạn cố gắng sử dụng chúng). Ngoài ra, hãy đảm bảo rằng mức độ cô lập giao dịch của bạn được đặt phù hợp, nó phải là SERIALIZABLE, đây không phải là mức mặc định cho MySQL.
bài viết này có một ví dụ hay giải thích tác động của các mức độ cô lập khác nhau bằng cách sử dụng một ví dụ rất giống với ví dụ của bạn.