mySQL - установить уровень изоляции с помощью PHP MySQL

Как мне установить уровень изоляции транзакции "SERIALIZABLE" в PHP с использованием mysqli? Я искал везде, и я не могу найти информацию об этом.

Вот объяснение уровней изоляции.

2 ответа

Решение

Вы можете просто установить уровень изоляции в запросе, прежде чем запускать свои операторы. Это предполагает, что вы делаете все, используя один и тот же сеанс:

$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
...

Вы также можете отключить автоматическую фиксацию заранее, так как это меняет способ работы сериализуемой изоляции.

Короткий ответ:

$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");

Длинный ответ: Если вы не используете модификатор SESSION или GLOBAL, настройка уровня транзакции будет применяться только к самому следующему запросу.

tldr;

Согласно документации MySQL с таблицами InnoDB:

Без каких-либо СЕССИИ или ГЛОБАЛЬНОГО ключевого слова:

Оператор применяется только к следующей отдельной транзакции, выполненной в течение сеанса.

Последующие транзакции возвращаются к использованию значения сеанса названных характеристик.

Выписка не допускается в транзакциях

Обратите внимание, что установка GLOBAL Флаг повлияет на все последующие запросы. Существующие сеансы не будут затронуты.

Другие вопросы по тегам