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
Флаг повлияет на все последующие запросы. Существующие сеансы не будут затронуты.