CodeBlanks Logo Icon CodeBlanks

SELECT FOR UPDATE

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

query.sql
-- safe update
SELECT * FROM accounts WHERE id = 1

Sample solution

query.sql
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

Question
SELECT * FROM accounts WHERE id = 1 ____
Answer
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

All lessons in Advanced