SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
-- First count query
SELECT COUNT(*) FROM Orders WHERE Product = 'Mango Pickle';
-- ... doing other work ...
WAITFOR DELAY '00:00:05'; -- Wait 5 seconds
-- Second count query (same as first)
SELECT COUNT(*) FROM Orders WHERE Product = 'Mango Pickle';
COMMIT;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
-- Insert new order while Transaction 1 is running
INSERT INTO Orders (Product, Quantity, Customer)
VALUES ('Mango Pickle', 2, 'Babita Ji');
COMMIT; -- This creates the phantom row
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- First count query - locks the range
SELECT COUNT(*) FROM Orders WHERE Product = 'Mango Pickle';
-- ... doing other work ...
WAITFOR DELAY '00:00:05';
-- Second count query
SELECT COUNT(*) FROM Orders WHERE Product = 'Mango Pickle';
COMMIT;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- This INSERT will be blocked by Transaction 1's range lock
INSERT INTO Orders (Product, Quantity, Customer)
VALUES ('Mango Pickle', 2, 'Babita Ji');
COMMIT;
✅ Benefits of SERIALIZABLE:
- Prevents all concurrency phenomena (dirty read, non-repeatable read, phantom read)
- Ensures consistent results within a transaction
- Range locks prevent phantom rows
⚠️ Trade-offs:
- Reduced concurrency (transactions may wait)
- Higher chance of deadlocks
- Lower performance
BEGIN TRANSACTION;
-- Find all low-stock items (< 10 units)
SELECT ProductID, ProductName, Stock
FROM Inventory
WHERE Stock < 10;
-- Calculate total reorder cost
SELECT SUM(ReorderCost) as TotalCost
FROM Inventory
WHERE Stock < 10;
-- ... manager reviews the list ...
-- Re-run the same queries for final confirmation
SELECT COUNT(*) FROM Inventory WHERE Stock < 10;
COMMIT;
BEGIN TRANSACTION;
-- Customer purchases last units of a product
UPDATE Inventory
SET Stock = Stock - 5
WHERE ProductID = 'WIDGET-123';
COMMIT;
🎯 Business Impact:
- Without SERIALIZABLE: Inventory report shows inconsistent data, wrong reorder amounts
- With SERIALIZABLE: Consistent snapshot of inventory throughout the transaction
- Use Case: Financial reports, audit trails, inventory management