Bạn cần đặt cả hai kết nối ở mức cách ly giao dịch có thể tuần tự hóa để tránh trường hợp bạn đang mô tả, bằng cách đặt tx_isolation
trên mỗi kết nối với:
SET @@tx_isolation = SERIALIZABLE;
hoặc
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
hoặc bằng cách đặt mức cô lập chung với:
SET @@global.tx_isolation = SERIALIZABLE;
hoặc
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
được kế thừa bởi bất kỳ kết nối nào được mở sau đó. Ở cấp độ đó, các giao dịch sẽ chặn bất kỳ truy vấn nào nếu một giao dịch khác đang được thực hiện, tức là. một giao dịch đã tạo ra một truy vấn (đọc hoặc ghi) trên các bảng giống nhau.
Xem tài liệu mysql để biết thêm chi tiết.