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

Asked
Viewd4528

4

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

Здесь объяснение уровней изоляции.

2 ответов

8

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

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

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

  • 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
0

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

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

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

tldr;

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

Без ключевого слова SESSION или GLOBAL:

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

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

Оператор не разрешен в транзакциях

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