SobesLab логотип SobesLab

Ответ

Стандарт SQL определяет четыре уровня изоляции транзакций: Read Uncommitted (самый низкий, "чтение неподтверждённых" данных) — транзакция может видеть изменения других незавершённых транзакций ("грязное чтение"), практически не используется из-за опасности; Read Committed — транзакция видит только подтверждённые на данный момент изменения (грязных чтений нет, но возможны неповторяемые чтения: один и тот же запрос в транзакции может вернуть разные данные, если другая транзакция изменила и закоммитила); Repeatable Read — транзакция гарантирует повторяемость чтений: если она прочитала запись, то пока она активна, другие транзакции не могут изменить или удалить эту запись (исключены грязные и неповторяемые чтения, но возможны "фантомы" — вставка новых строк другим коммитом может проявиться при повторном запросе); Serializable — самый строгий уровень, полный эффект как если бы транзакции выполнялись последовательно, исключены все аномалии, но достигается ценой блокировок и снижения параллелизма. Разные СУБД могут по-разному реализовывать эти уровни (например, MySQL InnoDB по умолчанию Repeatable Read, в котором уже нет фантомов из-за механизмов MVCC). Выбор уровня — компромисс между корректностью параллелизма и производительностью.