Pessimistic locking (bi quan): giả định hay xung đột → khóa trước khi sửa. Vd SELECT ... FOR UPDATE khóa hàng, transaction khác phải chờ. Đơn giản, không cần retry, nhưng giảm throughput khi tranh chấp cao và có nguy cơ deadlock.
Optimistic locking (lạc quan): giả định ít xung đột → không khóa, thay vào đó dùng cột version/timestamp. Khi update kiểm WHERE id = ? AND version = ?, tăng version; nếu 0 hàng bị update nghĩa là ai đó đã sửa trước → retry với dữ liệu mới. Throughput cao khi ít xung đột, hợp workload đọc nhiều và hệ phân tán, nhưng phải xử lý retry.
Chọn: tranh chấp cao + dữ liệu quan trọng (số dư, tồn kho) → pessimistic; đọc nhiều / xung đột hiếm (sửa hồ sơ) → optimistic. Nhiều ORM (Hibernate, ActiveRecord) hỗ trợ optimistic qua cột version sẵn.
Kỹ thuật liên quan trong PostgreSQL: SELECT ... FOR UPDATE SKIP LOCKED (bỏ qua hàng đang khóa — pattern chuẩn cho job queue, tránh worker nhặt trùng việc), advisory lock (pg_try_advisory_lock) cho điều phối ở tầng ứng dụng, và lock_timeout để không chờ khóa vô hạn.