mySQL - установить уровень изоляции с помощью PHP MySQL - PullRequest
4 голосов
/ 13 ноября 2009

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

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

Ответы [ 2 ]

8 голосов
/ 13 ноября 2009

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

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

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

0 голосов
/ 31 октября 2018

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

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

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

tldr;

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

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

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

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

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

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

...