Установка уровня изоляции транзакции MySQL

Как установить уровень изоляции MySQL 5.1 InnoDB?

Введя:

mysql> показать такие переменные, как "% isola%";

Уровень по умолчанию, установленный для InnoDB, - это повторяемое чтение.
Как мне изменить уровень изоляции?


person Wen Jun    schedule 29.10.2011    source источник


Ответы (3)


SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SESSION не является обязательным, просто ограничивает настройку текущим сеансом.
READ UNCOMMITTED следует заменить на желаемый уровень.

https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html

person Niet the Dark Absol    schedule 29.10.2011
comment
Чтобы сделать этот ответ еще более полным: вы можете установить уровень изоляции глобально, для текущего сеанса или только для следующей транзакции, как описано здесь: dev.mysql.com/doc/refman/5.5/en/set-transaction.html - person alexpirine; 08.02.2013

Добавить переменную сеанса в строку подключения

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

?sessionVariables=transaction_isolation='READ-COMMITTED'

Вы можете проверить значения других уровней изоляции.

person Sorter    schedule 24.04.2020
comment
Может сработать, но неудобно. Это потребует наличия отдельного источника данных, если вам нужен более строгий уровень для конкретного запроса. Проблема со встроенными транзакциями или механизмами блокировки внутри ORM (например, Hibernate или Batis) в том, что они не гарантируют согласованность данных в сценарии с несколькими экземплярами. А другой сервер или приложение могут пересылать данные, которые кажутся «заблокированными» для модификации. - person Andrey Doloka; 29.03.2021

Мой уровень изоляции по умолчанию также был REPEATABLE READ в приведенном выше примере, вы можете изменить его для текущего сеанса, но если вы хотите полностью изменить его, вы можете попробовать с помощью этой команды:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Протестировано на сервере Mysql версии: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)

person atrichkov    schedule 18.09.2018
comment
Это неверно, вам нужно добавить «GLOBAL». Без ключевого слова SESSION или GLOBAL: оператор применяется только к следующей отдельной транзакции, выполняемой в рамках сеанса. Последующие транзакции возвращаются к использованию значения сеанса названных характеристик. - person GoYun.Info; 26.02.2021