Изоляция — это свойство уровня базы данных, которое контролирует, как и когда вносятся изменения и становятся ли они видимыми друг для друга, пользователей и систем. Одна из целей изоляции состоит в том, чтобы позволить нескольким транзакциям происходить одновременно, не оказывая негативного влияния на выполнение каждой из них.
Изоляция является неотъемлемой частью транзакционных свойств базы данных. Это третье свойство стандартов ACID (атомарность, согласованность, изоляция, долговечность) , обеспечивающих согласованность и точность данных.
Как работает изоляция
Если Джо выполняет транзакцию для базы данных в то же время, когда Мэри выполняет другую транзакцию, обе транзакции должны работать в базе данных изолированно. База данных должна либо выполнить всю транзакцию Джо перед выполнением Мэри, либо наоборот. Эта исключительность не позволяет транзакции Джо читать промежуточные данные, полученные как побочный эффект части транзакции Мэри, которая в конечном итоге не будет передана в базу данных.
Свойство изоляции не гарантирует, что определенная транзакция будет выполняться первой, только то, что они не будут мешать друг другу.
Уровни изоляции
Есть четыре уровня изоляции. Более высокая изоляция ограничивает возможность пользователей одновременно получать доступ к одним и тем же данным. Чем выше уровень изоляции, тем больше системных ресурсов и тем более вероятно, что транзакции базы данных будут блокировать друг друга.
Чем ниже уровень изоляции, тем больше вероятность того, что пользователи столкнутся с явлениями чтения, такими как незафиксированные зависимости, также известные как грязные чтения, которые приводят к чтению данных из строки, которая была изменена другим пользователем, но еще не зафиксирована в базу данных.
- Serializable — это самый высокий уровень, который означает, что одна транзакция должна завершиться до начала другой транзакции.
- Повторяемые операции чтения позволяют осуществлять доступ к транзакциям после начала транзакции, даже если она еще не завершена. Этот уровень учитывает фантомные чтения или информацию о вставленных или удаленных строках, даже если изменения в существующих строках недоступны для чтения.
- Функция «Зафиксированное чтение» позволяет получить доступ к данным после их фиксации в базе данных, но не раньше.
- Чтение незафиксированным является самым низким уровнем изоляции и позволяет получить доступ к данным до внесения изменений.