Как мне установить уровень изоляции транзакции на «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 , установка уровня транзакции будет применяться только к следующему запросу.
tldr;
Согласно документации по MySQL с InnoDBтаблицы:
Без ключевого слова SESSION или GLOBAL:
Заявление применяется только к следующей выполненной транзакции. в рамках сеанса.
Последующие транзакции возвращаются к использованию значения сеанса указанного характеристики.
Оператор не разрешен в транзакциях
Обратите внимание, что установка флага GLOBAL
повлияет на все последующие запросы. Существующие сеансы не будут затронуты.
https://dba.stackexchange.com/questions/175550/mysql-5-7-scope-of-set-transaction-isolation-level-for-select
– Kevin Mesiab31 октября 2018, 14:08Есть ли дополнительная информация относительно комментария «Вы также можете отключить автоматическую фиксацию, поскольку это меняет способ работы сериализуемой изоляции»?
– Juha Palomäki30 августа 2016, 09:27