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

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

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


person Mark    schedule 13.11.2009    source источник


Ответы (2)


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

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

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

person carson    schedule 13.11.2009
comment
Есть ли дополнительная информация о том, что «вы также можете отключить автоматическую фиксацию заранее, поскольку она меняет способ работы сериализуемой изоляции». комментарий? - person Juha Palomäki; 30.08.2016
comment
dba.stackexchange.com/questions/175550/ - person Kevin Mesiab; 31.10.2018

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

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

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

тлдр;

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

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

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

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

Эта инструкция не разрешена в транзакциях

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

person Kevin Mesiab    schedule 31.10.2018