【问题标题】:Doctrine Changing Transaction Isolation Level教义改变事务隔离级别
【发布时间】:2020-01-14 00:38:49
【问题描述】:

我想将所有对 mysql 数据库的查询/更新的事务隔离级别更改为已提交读。由于我们使用的是 google 应用程序数据库,因此无法在 mysql 配置中更改它,因此需要在与数据库的连接中进行更改。

我们正在使用 Doctrine 和 Symfony3,除了发出诸如

之类的命令之外,我正在努力了解如何实现这一点
 $this->getEntityManager()->getConnection()->prepare('SET TRANSACTION ISOLATION LEVEL READ COMMITTED')->execute();

我很确定对更改事务隔离有一些支持,但我似乎无法弄清楚如何实现这一点。

【问题讨论】:

    标签: mysql doctrine transaction-isolation


    【解决方案1】:

    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);
    

    如果您希望它成为默认值,那么您不必在每个连接中都设置它,您必须在 MySQL 服务器的 my.cnf 文件中设置它。见https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_isolation

    如果您无法全局更改my.cnf,那么您必须使用如上所示的一行代码为每个连接自行设置。

    【讨论】:

    • 谢谢比尔 - 在 Symfony 中,教义.yaml 文件用于配置连接,也许我误解了,但不清楚如何配置应用程序以始终在连接时设置事务隔离
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多