Привет. Давненько у нас не было про Базы Данных статей, вот исправляюсь.
Постараюсь кратко, сухо и максимально понятно изложить материал.
Уровни изоляции транзакции определяют объемом данных, видимых транзакции, особенно когда к одним и тем же данным обращаются несколько транзакций одновременно.
Стандарт SQL определяет четыре уровня изоляции транзакций, от слабого до сильного:
Read Uncommitted - транзакции разрешено читать данные из строки, которая была изменена другой запущенной транзакцией и еще не зафиксирована. Это явление также известно как «грязное чтение».
Зафиксировано чтение: гарантирует, что любые данные, прочитанные транзакцией, будут зафиксированы в момент чтения, что предотвращает «грязное чтение». Но он не обещает, что если транзакция повторно прочитает данные, она найдет те же данные; данные могут быть изменены после чтения.
Repeatable Read - аналогично Read Committed, но гарантирует, что если транзакция повторно считывает данные, она всегда будет находить одни и те же данные. По сути, он сохраняет блокировку чтения до тех пор, пока транзакция не будет зафиксирована. Несмотря на то, что эта изоляция довольно строгая, аномалия фантомного чтения все еще возможна.
Сериализуемый: самый строгий уровень изоляции, предотвращающий большинство аномалий. Поставляется с большими затратами на производительность.
Для опытных читателей: интересно, что MySQL, Postgres, Oracle DB и MS SQL Server по-разному понимают и реализуют вышеупомянутые уровни изоляции. Например, Oracle не поддерживает уровень Serializable
Так что учите мать часть, господа программисты