Как установить уровень изоляции транзакции на «SERIALIZABLE» в PHP с помощью mysqli? Я искал везде, и я не могу найти никакой информации об этом.
Здесь приводится объяснение уровней изоляции.
Как установить уровень изоляции транзакции на «SERIALIZABLE» в PHP с помощью mysqli? Я искал везде, и я не могу найти никакой информации об этом.
Здесь приводится объяснение уровней изоляции.
Вы можете просто установить уровень изоляции в запросе, прежде чем запускать свои операторы. Это предполагает, что вы делаете все, используя один и тот же сеанс:
$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, установка уровня транзакции будет применяться только к следующему запросу.
тлдр;
Согласно документации MySQL с таблицами InnoDB:
Без какого-либо ключевого слова SESSION или GLOBAL:
Оператор применяется только к следующей одиночной транзакции, выполненной в рамках сеанса.
Последующие транзакции возвращаются к использованию сеансового значения именованных характеристик.
Эта инструкция не разрешена в транзакциях
Обратите внимание, что установка флага GLOBAL
повлияет на все последующие запросы. Существующие сеансы не будут затронуты.