Middle
Какви са видовете изолация на транзакциите?
sobes.tech AI
Отговор от AI
Изолацията на транзакциите определя колко една транзакция може да вижда междинните промени на други паралелно изпълняващи се транзакции.
Стандартът SQL определя четири нива на изолация:
- Read Uncommitted (Четене на необработени данни): Най-ниското ниво. Транзакцията може да чете необработени промени на други транзакции (до "мръсно" четене).
- Read Committed (Четене на обработени данни): Транзакцията може да чете само данни, които са били обработени от други транзакции. Избягва "мръсното" четене.
- Repeatable Read (Повторяемо четене): Транзакцията гарантира, че данните, прочетени по време на транзакцията, няма да се променят при повторно четене. Избягва "мръсното" и "неповторяемо" четене. Възможни са "фантоми".
- Serializable (Сериализируемо): Най-високото ниво на изолация. Гарантира, че паралелните транзакции се изпълняват така, сякаш са последователни. Избягва всички нежелани явления: "мръсно" четене, "неповторяемо" четене и "фантоми".
Нежелани явления при паралелно изпълнение на транзакции:
- Dirty Read (Мръсно четене): Транзакция A чете данни, модифицирани от Транзакция B, които все още не са обработени. Ако Транзакция B отмени промените, Транзакция A ще работи с неверни данни.
- Non-repeatable Read (Неповторяемо четене): Транзакция A чете едни и същи данни два пъти, но между четенията Транзакция B променя тези данни. В резултат Транзакция A получава различни стойности при повторните четения.
- Phantom Read (Фантомно четене): Транзакция A изпълнява заявка, която връща набор от редове. Транзакция B добавя или премахва редове, които съответстват на критериите на заявката A. При повторното изпълнение на същата заявка Транзакция A получава друг набор от редове.
Обобщена таблица на нежеланите явления по нива на изолация:
| Ниво на изолация | Мръсно четене | Неповторяемо четене | Фантоми |
|---|---|---|---|
| Read Uncommitted | Да | Да | Да |
| Read Committed | Не | Да | Да |
| Repeatable Read | Не | Не | Да |
| Serializable | Не | Не | Не |
Изборът на ниво на изолация влияе върху производителността и коректността на работата на приложението. Колкото по-високо е нивото на изолация, толкова по-големи са разходите.