SELECT ... FOR UPDATE khóa đúng các dòng vừa chọn, để transaction khác không thể update/delete chúng cho đến khi bạn commit hoặc rollback.
Nó dành cho tình huống "đọc — sửa — ghi" cần an toàn, ví dụ trừ tồn kho hay lấy job khỏi hàng đợi.
sql
BEGIN;
SELECT * FROM inventory WHERE sku = 'A' FOR UPDATE;
UPDATE inventory SET stock = stock - 1 WHERE sku = 'A';
COMMIT;Giữ transaction càng ngắn càng tốt: khóa lâu sẽ chặn người khác, gây timeout và nguy cơ deadlock.