CodeIgniter 3 的事务严格模式控制多组事务失败时的回滚范围:启用时(默认)任一组失败则全部回滚;禁用时各组独立处理,$this->db->trans_strict(FALSE)可关闭。

什么是事务严格模式
CodeIgniter 默认启用事务严格模式($this->db->trans_strict(TRUE))。这意味着:当多个事务组嵌套执行时,只要其中任意一组失败,整个外层事务都会被回滚。
关闭严格模式后,各事务组相互独立——某组失败不会导致其他组回滚,适合需要“局部容错”的业务场景。
如何开启或关闭严格模式
在模型或控制器中任意位置调用即可,通常放在事务开始前:
- 关闭严格模式:$this->db->trans_strict(FALSE);
- 重新开启严格模式:$this->db->trans_strict(TRUE);
注意:该设置只对后续事务生效,不影响已启动但未完成的事务。
严格模式与事务流程的关系
无论是否开启严格模式,都需配合标准事务结构使用:
- $this->db->trans_start();
- 执行一个或多个查询($this->db->query())
- $this->db->trans_complete();
区别在于:strict=TRUE 时,一旦任一 query 失败(如主键冲突、字段超长),$this->db->trans_status() 返回 FALSE,且外层事务自动 rollback;strict=FALSE 时,仅当前事务组 rollback,其余组照常 commit。
实际应用建议
多数业务应保持 strict=TRUE,避免数据状态不一致;仅在明确需要“部分提交”时才临时关闭,例如:
- 批量导入中允许个别记录失败而不中断整体流程
- 日志写入与核心更新分离,日志失败不影响主业务
务必搭配 $this->db->trans_status() 主动判断结果,并按需处理错误,不能依赖框架自动提示。


















