【问题标题】:How to change the isolation level of a transaction in CodeIgniter?如何在 CodeIgniter 中更改事务的隔离级别?
【发布时间】:2013-10-16 21:32:51
【问题描述】:

当我在 CodeIgniter 中使用 $this->db->trans_start(); 时,它会启动一个具有已提交读隔离级别的事务。我想改用可序列化的隔离级别,但trans_start 似乎不允许我设置这个。

如何在 CodeIgniter 中设置事务的事务级别?

【问题讨论】:

    标签: php codeigniter postgresql transactions


    【解决方案1】:

    在事务开始后立即在查询中使用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

    $this->db->trans_start();
    $this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;');
    

    【讨论】:

      【解决方案2】:

      根据mysql docs

      如果你想在交易过程中这样做,我认为你应该使用SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE

      否则

      SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 并在之前像这样开始交易:

      $this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;');
      $this->db->trans_start();
      

      这是来自文档的复制粘贴:

      使用 GLOBAL 关键字,语句设置默认事务 所有后续会话的全局级别。现有会话是 不受影响。

      使用 SESSION 关键字,语句设置默认事务 在当前执行的所有后续事务的级别 会话。

      没有任何 SESSION 或 GLOBAL 关键字,该语句设置 执行的下一个(未启动)事务的隔离级别 在当前会话中。

      SET TRANSACTION ISOLATION LEVEL 没有 GLOBAL 或 SESSION 不是 在有活动的事务时允许

      【讨论】:

      • 我尝试了两种方法,并在之前设置了交易对我不起作用。也许事务开始一个新的会话?使用 SET SESSION,开始事务之后设置它工作正常。
      猜你喜欢
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2010-12-12
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多