【发布时间】:2013-10-16 21:32:51
【问题描述】:
当我在 CodeIgniter 中使用 $this->db->trans_start(); 时,它会启动一个具有已提交读隔离级别的事务。我想改用可序列化的隔离级别,但trans_start 似乎不允许我设置这个。
如何在 CodeIgniter 中设置事务的事务级别?
【问题讨论】:
标签: php codeigniter postgresql transactions
当我在 CodeIgniter 中使用 $this->db->trans_start(); 时,它会启动一个具有已提交读隔离级别的事务。我想改用可序列化的隔离级别,但trans_start 似乎不允许我设置这个。
如何在 CodeIgniter 中设置事务的事务级别?
【问题讨论】:
标签: php codeigniter postgresql transactions
在事务开始后立即在查询中使用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;:
$this->db->trans_start();
$this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;');
【讨论】:
如果你想在交易过程中这样做,我认为你应该使用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 不是 在有活动的事务时允许
【讨论】: