Установка уровня изоляции транзакций в MySQL.
В MySQL установить уровень изоляции транзакций можно двумя способами:
1. На уровне сервера при его запуске. Это делается либо с помощью опции –transaction-isolation=<isolation_level_name>, либо установкой переменной transaction-isolation в конфигурационном файле в секции [mysqld].
2. На уже запущенном сервере с помощью команды SET TRANSACTION ISOLATION LEVEL. Возможный синтаксис данной команды представлен в примере ниже:
SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level_name>;
SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level_name>;
SET TRANSACTION ISOLATION LEVEL <isolation_level_name>;
<isolation_level_name> при установке в конфигурационном файле или в командной строке при запуске сервера может иметь значения: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ и SERIALIZABLE.
При использовании команды SET TRANSACTION ISOLATION LEVEL значение <isolation_level_name> может быть следующее: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Обратите внимание на их разное написание, в одном случае используется ‘-‘, в другом нет.
Уровень изоляции транзакций может быть установлен на уровне сервера (как глобальная переменная) и на уровне сессии. Если нет явного указания (GLOBAL или SESSION), то по умолчанию подразумевается уровень сессии, т.е. следующие две команды будут эквивалентны:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Для того, чтобы установить значение этой переменной на уровне сервера, надо явно указать слово GLOBAL:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Напомню, что в этом случае установленное значение по умолчанию будет действовать только для новых подключений к серверу. Для всех пользователей, которые уже работали с сервером, ничего не изменится.
Клиент всегда может изменить уровень изоляции транзакций в своей сессии, изменение уровня изоляции транзакций на уровне сервера (GLOBAL) требует наличие привилегий SUPER.
Для того, чтобы посмотреть текущий уровень изоляции транзакций существует переменная tx_isolation. Эта переменная может использоваться с префиксами global или session. Отсутствие префикса эквивалентно значению session. Значение переменных global.tx_isolation и session.tx_isolation может отличаться.