Izolace je vlastnost na úrovni databáze, která řídí, jak a kdy jsou provedeny změny a jestli se stanou viditelnými pro ostatní, uživatele a systémy. Jedním z cílů izolace je umožnit více transakcí současně, aniž by to nepříznivě ovlivnilo provádění každé z nich. Izolace je nedílnou součástí transakčních vlastností databáze. Jedná se o třetí vlastnost standardů ACID (Atomicity, Consistency, Isolation, Durability), která zajišťuje, že data zůstanou konzistentní a přesná.
Jak funguje izolace
Pokud Joe vydá transakci databáze ve stejnou dobu, kdy Mary vystaví jinou transakci, obě transakce by měly fungovat v databázi izolovaným způsobem. Databáze by měla provést celou Joeovu transakci před provedením Mary nebo naopak. Tato exkluzivita brání Joeově transakci ve čtení mezilehlých dat vytvořených jako vedlejší účinek části Maryiny transakce, která nakonec nebude potvrzena do databáze. Vlastnost izolace nezajišťuje, že konkrétní transakce bude provedena jako první, pouze že nebudou navzájem rušit.
Úrovně izolace
Existují čtyři úrovně izolace. Vyšší izolace omezuje schopnost uživatelů souběžně přistupovat ke stejným datům. Čím vyšší úroveň izolace, tím větší systémové prostředky jsou vyžadovány a tím pravděpodobnější budou transakce databáze navzájem blokovat.
- Serializovatelné je nejvyšší úroveň, což znamená, že jedna transakce musí být dokončena před zahájením další transakce.
- Opakovatelný čte povolit přístup k transakcím po zahájení transakce, i když nebyla dokončena. Tato úroveň umožňuje fiktivní čtení nebo povědomí o vložených nebo odstraněných řádcích, i když změny existujících řádků nejsou čitelné.
- Číst potvrzeno umožňuje přístup k datům po potvrzení dat do databáze, ale ne dříve.
- Číst nezávazně je nejnižší úroveň izolace a umožňuje přístup k datům před provedením změn.
Jak je úroveň izolace snížena, tím více existuje šance, že se uživatelé setkají s čtecími jevy, jako jsou nezávazné závislosti, známé také jako špinavé čtení, což má za následek čtení dat z řádku, který byl upraven jiným uživatelem, ale ještě nebyl potvrzen do databáze.