Transaction Isolation Levels
In this page:
SET TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE;
Isolation Levels को समझना
Isolation levels यह decide करते हैं कि एक transaction के in-progress changes उसी समय चल रही दूसरी transactions को कितने visible हैं, concurrent access के तहत data consistency और performance के बीच tradeoff control करते हुए।
उदाहरण: Understanding Isolation Levels
SELECT @@transaction_isolation;
READ UNCOMMITTED (Dirty Reads)
READ UNCOMMITTED सबसे loose isolation level है, एक transaction को किसी दूसरी transaction के changes commit होने से पहले ही देखने देते हुए — एक so-called dirty read जो ऐसा data expose कर सकता है जो बाद में roll back हो जाए।
उदाहरण: READ UNCOMMITTED (Dirty Reads)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
SELECT * FROM accounts;
COMMIT;
READ COMMITTED (Non-Repeatable Reads)
READ COMMITTED guarantee करता है कि आप कभी किसी दूसरी transaction का uncommitted data नहीं देखेंगे, लेकिन एक transaction के अंदर same query दो बार चलाना अभी भी अलग results दे सकता है अगर बीच में कोई दूसरी transaction commit हो जाए।
उदाहरण: READ COMMITTED (Non-Repeatable Reads)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SELECT * FROM accounts;
COMMIT;
REPEATABLE READ (MySQL में Default)
REPEATABLE READ MySQL का default isolation level है, और यह guarantee करता है कि अगर आप एक transaction के अंदर same row दो बार पढ़ें, आपको दोनों बार identical values मिलेंगी, भले ही कोई दूसरी transaction बीच में उस row को बदल दे।
उदाहरण: REPEATABLE READ (Default in MySQL)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1;
SELECT balance FROM accounts WHERE id = 1;
COMMIT;
SERIALIZABLE (Highest Isolation)
SERIALIZABLE available सबसे strictest level है, effectively concurrent transactions को एक साथ के बजाय एक के बाद एक चलने जैसा behave करवाते हुए — यह concurrency anomalies को पूरी तरह खत्म कर देता है लेकिन एक busy system को noticeably धीमा कर सकता है।
उदाहरण: SERIALIZABLE (Highest Isolation)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT * FROM accounts;
COMMIT;
- यह मान लेना कि MySQL का default
READ COMMITTEDहै, जबकि InnoDB का defaultREPEATABLE READहै। - एक चल रही transaction के अंदर
SET TRANSACTION ISOLATION LEVELइस्तेमाल करना, या इसके रहने की उम्मीद करना, जबकि यह सिर्फ अगली transaction पर apply होता है। - real code में
READ UNCOMMITTEDइस्तेमाल करना और ऐसा data पढ़ना जो बाद में roll back हो सकता है।
- एक transaction statements को group करता है ताकि वे साथ succeed या fail हों।
COMMITchanges save करता है, औरROLLBACKउन्हें undo करता है।SAVEPOINTएक partial rollback point mark करता है, और isolation levels control करते हैं कि transactions एक-दूसरे के changes कैसे देखती हैं।
Chapter Quiz — Complete all 4 topics to unlock
0/4 topics done
Complete these topics first: