【问题标题】:What is the default Isolation level in case of Doctrine using ZF1 and ZF2 and MySql as database?在 Doctrine 使用 ZF1 和 ZF2 以及 MySql 作为数据库的情况下,默认的隔离级别是多少?
【发布时间】:2016-08-04 15:01:28
【问题描述】:

我们使用 Doctrine 作为 ORM,框架 ZF1 和 ZF2,以及数据库 MySql。我知道innodb 引擎的默认隔离级别是Repeatable Read。由于我使用Doctrine 作为 ORM,默认的isolation level 是什么?在这个document 中声明如下:

Doctrine\DBAL\Connection 的默认事务隔离级别由底层平台选择,但始终至少为 READ_COMMITTED。

让我更困惑的是另一篇来自教义本身的文章。我这个document 声明如下:

这可能会导致不可预知的结果,因为显式 WITH (NOLOCK) 表提示会告诉 SQL Server 在事务隔离级别 READ UNCOMMITTED 而不是 默认的 READ COMMITTED 事务隔离级别中运行特定查询。因此,现在 LockMode::NONE 和 null 之间存在区别,以便能够告诉 Doctrine 是否有意为查询添加表锁定提示。

谁能解释一下 Doctrine 的默认隔离级别是多少?

【问题讨论】:

    标签: mysql zend-framework doctrine-orm zend-framework2 isolation-level


    【解决方案1】:

    如果您不确定默认隔离级别是什么,您可以使用SET TRANSACTION ISOLATION LEVEL 一次性设置它。

    【讨论】:

      【解决方案2】:

      您可以使用Doctrine\DBAL\Driver\Connection 的getTransactionIsolation() 方法来确定活动事务的隔离级别。

      【讨论】:

        【解决方案3】:

        对于MySql,默认隔离级别为Repeatable Read.

        对于MSSql,默认隔离级别为Read Committed。

        除非您更改中间件(ORM)的默认设置,否则以下语句是有效的:

        Doctrine\DBAL\Connection 的默认事务隔离级别 由底层平台选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-05
          • 2015-10-22
          • 1970-01-01
          • 1970-01-01
          • 2022-01-09
          • 2015-08-02
          • 2019-04-24
          相关资源
          最近更新 更多