0
0
SQLquery~20 mins

Read phenomena (dirty reads, phantom reads) in SQL - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Read Phenomena Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
What output shows a dirty read scenario?
Consider two transactions:

Transaction 1 updates a row but does not commit.
Transaction 2 reads the updated row before commit.

Which query result best illustrates the dirty read phenomenon?
SQL
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- no commit yet

-- In parallel
SELECT balance FROM accounts WHERE id = 1;
ATransaction 2 reads the old balance before update.
BTransaction 2 reads a balance from a different account.
CTransaction 2 waits until Transaction 1 commits before reading.
DTransaction 2 reads the new balance even though Transaction 1 has not committed.
Attempts:
2 left
💡 Hint
Dirty reads happen when a transaction reads uncommitted changes from another transaction.
query_result
intermediate
2:00remaining
Which output best illustrates a phantom read?
Transaction 1 runs a query to count rows matching a condition.
Transaction 2 inserts a new row matching that condition and commits.
Transaction 1 runs the same query again.

What is the expected result?
SQL
BEGIN TRANSACTION;
SELECT COUNT(*) FROM orders WHERE status = 'pending';
-- returns 5

-- In parallel
INSERT INTO orders (id, status) VALUES (101, 'pending');
COMMIT;

-- Back in Transaction 1
SELECT COUNT(*) FROM orders WHERE status = 'pending';
AFirst query returns 5, second query returns 6 rows.
BBoth queries return 5 rows.
CBoth queries return 6 rows.
DSecond query returns fewer rows than the first.
Attempts:
2 left
💡 Hint
Phantom reads happen when new rows appear in repeated queries within the same transaction.
🧠 Conceptual
advanced
2:00remaining
Which isolation level prevents dirty reads but allows phantom reads?
Choose the SQL transaction isolation level that stops dirty reads but still permits phantom reads.
AREAD UNCOMMITTED
BSERIALIZABLE
CREAD COMMITTED
DREPEATABLE READ
Attempts:
2 left
💡 Hint
Think about which isolation level blocks reading uncommitted data but does not lock range scans.
📝 Syntax
advanced
2:00remaining
Which SQL snippet correctly sets the isolation level to prevent phantom reads?
You want to set the transaction isolation level to SERIALIZABLE to avoid phantom reads.
Which SQL command is correct?
ASET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BSET ISOLATION LEVEL TRANSACTION SERIALIZABLE;
CSET TRANSACTION LEVEL ISOLATION SERIALIZABLE;
DSET ISOLATION SERIALIZABLE TRANSACTION LEVEL;
Attempts:
2 left
💡 Hint
The correct syntax follows the pattern: SET TRANSACTION ISOLATION LEVEL ...
🔧 Debug
expert
3:00remaining
Why does this transaction still experience phantom reads despite using REPEATABLE READ?
Transaction 1:
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM products WHERE category = 'books';
-- returns 10 rows

Transaction 2:
INSERT INTO products (id, category) VALUES (101, 'books');
COMMIT;

Transaction 1:
SELECT * FROM products WHERE category = 'books';
-- returns 11 rows

Why does Transaction 1 see the new row?
AThe isolation level was not set correctly before the transaction started.
BREPEATABLE READ does not prevent phantom reads in all databases.
CTransaction 1 did not lock the table explicitly.
DThe new row was inserted with a different category.
Attempts:
2 left
💡 Hint
Some databases implement REPEATABLE READ differently regarding phantom reads.