Tôi đã cố gắng hiểu sự khác biệt giữa hai điều này. Tôi sẽ ghi lại những gì tôi đã tìm thấy với hy vọng nó sẽ hữu ích cho người tiếp theo.
Cả LOCK IN SHARE MODE
và FOR UPDATE
đảm bảo không có giao dịch nào khác có thể cập nhật các hàng được chọn. Sự khác biệt giữa cả hai là cách chúng xử lý các khóa trong khi đọc dữ liệu.
LOCK IN SHARE MODE
không ngăn một giao dịch khác đọc cùng một hàng đã bị khóa.
FOR UPDATE
ngăn chặn các lần đọc khóa khác của cùng một hàng (các lần đọc không khóa vẫn có thể đọc hàng đó; LOCK IN SHARE MODE
và FOR UPDATE
đang khóa các lần đọc).
Điều này quan trọng trong các trường hợp như cập nhật bộ đếm, nơi bạn đọc giá trị trong 1 câu lệnh và cập nhật giá trị trong một câu lệnh khác. Tại đây bằng cách sử dụng LOCK IN SHARE MODE
sẽ cho phép 2 giao dịch đọc cùng một giá trị ban đầu. Vì vậy, nếu bộ đếm được tăng lên 1 bởi cả hai giao dịch, thì số cuối cùng có thể chỉ tăng 1 - vì ban đầu cả hai giao dịch đều đọc cùng một giá trị.
Sử dụng FOR UPDATE
sẽ khóa giao dịch thứ hai không đọc giá trị cho đến khi giao dịch đầu tiên được thực hiện. Điều này sẽ đảm bảo bộ đếm tăng lên 2.