如何在CodeIgniter中更改事务的隔离级别?

时间:2013-10-09 13:28:19

标签: php codeigniter postgresql transactions

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

根据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关键字,语句设置   执行下一个(未启动)事务的隔离级别   在当前会议中。

     

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