Doctrine Изменение уровня изоляции транзакции - PullRequest
1 голос
/ 14 января 2020

Я бы хотел изменить уровень изоляции транзакций всех запросов / обновлений для базы данных mysql на Read Committed. Поскольку мы используем базу данных приложения Google, мы не можем изменить ее в конфигурации mysql и, следовательно, необходимо изменить ее при подключении к базе данных.

Мы используем Doctrine и Symfony3, и я изо всех сил чтобы увидеть, как этого можно добиться, кроме выдачи такой команды, как

 $this->getEntityManager()->getConnection()->prepare('SET TRANSACTION ISOLATION LEVEL READ COMMITTED')->execute();

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

1 Ответ

1 голос
/ 14 января 2020

https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/transactions.html документы:

Doctrine \ DBAL \ Connection также имеет методы для управления уровнем изоляции транзакции, поддерживаемым базовой базой данных. Connection # setTransactionIsolation ($ level) и Connection # getTransactionIsolation () могут использоваться для этой цели. Возможные уровни изоляции представлены следующими константами:

См. В документации список констант для уровней изоляции.

Таким образом, вы можете запустить это на каждом соединении:

$this->getEntityManager()->getConnection()->setTransactionIsolation($level);

Если вы хотите, чтобы оно было по умолчанию, поэтому вам не нужно устанавливать его при каждом соединении, вы должны будете установить его в my.cnf файле MySQL сервера. См. https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_isolation

Если вы не можете изменить my.cnf глобально, то вам придется установить его самостоятельно для каждого соединения, используя строку кода, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...