Đầu tiên, ở mức tối thiểu bạn nên thực hiện SELECT ... FOR UPDATE
vì vậy bạn khóa các hàng với SELECT ... FOR [SHARE|UPDATE]
khác truy cập. Bạn phải thực hiện việc này bên trong một giao dịch và giữ giao dịch đó cho đến khi bạn cập nhật hàng cuối cùng và commit
.
Các hàng bạn SELECT ... FOR UPDATE
không bị khóa so với SELECT
bình thường; chúng vẫn có thể đọc được đối với các giao dịch khác không sử dụng FOR UPDATE
hoặc FOR SHARE
.
Vẫn tốt hơn, hãy cố gắng diễn đạt lại toàn bộ dưới dạng UPDATE ... FROM
hoặc hoạt động dựa trên tập hợp khác, nơi bạn thực hiện tất cả công việc trong một truy vấn duy nhất. Nó thường hoạt động tốt hơn nhiều so với SELECT ... FOR UPDATE
theo sau là một luồng UPDATE
s.