Luồng 2 giữ một khóa chia sẻ trên hàng trong bảng người dùng.
Sau đó, chuỗi 1 cố gắng lấy một khóa độc quyền trên cùng một hàng và chuyển sang trạng thái chờ khóa.
Nhưng luồng 1 sẽ không có cơ hội để hết thời gian, bởi vì luồng 2 sau đó cố gắng nâng khóa của mình lên thành độc quyền ... nhưng để làm được điều đó, anh ta phải đợi luồng 1, đang ở chế độ chờ, nhưng nó đang chờ luồng 2.
Chúng đang chặn nhau.
Thật là bế tắc.
Máy chủ chọn một giao dịch để kết thúc, để chúng không chặn lẫn nhau một cách bất cần.
Phát hiện bế tắc cho phép một luồng ngay lập tức thành công với chi phí của luồng kia. Nếu không, cả hai sẽ bị kẹt trong ổ khóa, hãy đợi cho đến khi một trong hai người chết vì đợi quá lâu.
Bạn đang ở chế độ tự động gửi, nhưng tất nhiên, điều đó không có nghĩa là bạn không tham gia một giao dịch. Mọi truy vấn với InnoDB vẫn được xử lý trong một giao dịch, nhưng với autocommit, giao dịch được bắt đầu một cách ngầm định khi truy vấn bắt đầu thực thi và được cam kết ngầm khi nó thành công.