SELECT FOR UPDATE
- SQL course
- Advanced
- Lesson 63/81
- 4 min
Lock rows for update.
SELECT FOR UPDATE
SELECT FOR UPDATE reads and locks a row. Others cannot change it until the transaction ends.
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;A safe withdrawal.
SELECT FOR UPDATE — details
FOR UPDATE locks the read row. The lock stays until COMMIT or ROLLBACK.
For example, in a stock check you write SELECT stock FROM products WHERE id = 1 FOR UPDATE; nobody else can change that row until the transaction ends.
Practice SELECT FOR UPDATE
Lock and update a row with SELECT ... FOR UPDATE.
Starter code
-- safe update
SELECT * FROM accounts WHERE id = 1Sample solution
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;Expected output
id balance 1 400
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 When does a FOR UPDATE lock end?
- SELECT'te
- COMMIT'te Correct answer
- Never
- UPDATE'te
Explanation: A FOR UPDATE lock ends at COMMIT.
2 Add FOR UPDATE
SELECT * FROM accounts WHERE id = 1 ____
SELECT * FROM accounts WHERE id = 1 FOR UPDATE
Explanation: FOR UPDATE is the right answer.
3 SELECT FOR UPDATE: match the terms
| Term | Meaning |
|---|---|
FOR UPDATE |
lock + read |
BEGIN |
start |
COMMIT |
release lock |
safe |
consistent |