Hãy để tôi xem xét các trường hợp của bạn và giải thích cách hoạt động của những ổ khóa này:
1 trường hợp
T1 muốn cập nhật một số hàng trong bảng thử nghiệm của bạn. Giao dịch này đặt khóa IX trên tất cả bảng và khóa X trên 5 hàng đầu tiên.
T2 muốn cập nhật một số hàng trong bảng thử nghiệm của bạn. Giao dịch này đặt IX (vì IX tương thích với IX) khóa trên tất cả bảng và cố gắng đến 5 hàng đầu tiên nhưng không thể thực hiện được vì X không tương thích với X
Vì vậy, chúng tôi ổn.
2.1 trường hợp
T1 muốn cập nhật một số hàng trong bảng thử nghiệm của bạn. Giao dịch này đặt khóa IX trên tất cả bảng và khóa X trên 5 hàng đầu tiên.
T2 muốn chọn một số hàng từ bảng thử nghiệm của bạn. Và nó không đặt bất kỳ ổ khóa nào (vì InnoDB cung cấp các lần đọc không khóa)
2.1 trường hợp
T1 muốn cập nhật một số hàng trong bảng thử nghiệm của bạn. Giao dịch này đặt khóa IX trên tất cả bảng và khóa X trên 5 hàng đầu tiên.
T2 muốn cập nhật (chọn để cập nhật) một số hàng từ bảng thử nghiệm của bạn. Đặt IS trên toàn bộ bảng và cố gắng để khóa S trên hàng và không thành công vì X và S không tương thích.
Cũng luôn lưu ý về mức độ cô lập:mức độ khác nhau khiến cơ chế giải phóng / có được khóa khác nhau
Hy vọng nó sẽ hữu ích