Nếu bạn đặt mức cô lập giao dịch thành SERIALIZABLE
, InnoDB
wil imp —— append LOCK IN SHARE MODE
cho tất cả SELECT
tuyên bố.
Chế độ này xung đột với các ổ khóa được đặt bởi SELECT FOR UPDATE
và SELECT
s sẽ khóa.
Tuy nhiên, lưu ý rằng InnoDB
có thể khóa nhiều hàng hơn là đáp ứng WHERE
điều kiện. Điều này là do nó khóa tất cả các hàng đã quét , không chỉ những người phù hợp .
Giả sử, bạn có một chỉ mục trên col1
và truy vấn này:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
sử dụng chỉ mục này.
Điều này sẽ khóa tất cả bản ghi có col1 = 1
, ngay cả những người có col2 <> 2