使用 CodeIgniter 事务?
Posted
技术标签:
【中文标题】使用 CodeIgniter 事务?【英文标题】:Using CodeIgniter transactions? 【发布时间】:2018-01-13 22:01:27 【问题描述】:使用有什么区别
$this->db->trans_start();
并使用
$this->db->query('START TRANSACTION');
?
其实我想把这个问题应用到其他编程语言上,比如C#和BeginTransaction()
。
您何时明确写出要在查询中开始事务,何时仅从框架或您使用的任何语言调用内置方法?
【问题讨论】:
如果可能,我会使用框架方法。它可能带有特定的错误处理、事件、日志记录等,您会在原始查询中错过这些。在 CI 中,您将错过它首先运行的SET AUTOCOMMIT=0
查询:github.com/bcit-ci/CodeIgniter/blob/…
【参考方案1】:
问题:使用答案有什么区别:没有。两者都做同样的工作。
说明
如果您需要了解 CI 事务,请阅读 this answer another question。
但仅使用$this->db->query()
无法完整归档事务部分。
我个人推荐这个Read this Documentaion
问题:你什么时候明确写出你想在查询中开始一个事务,什么时候你只是从框架或你使用的任何语言中调用一个内置方法?答案:(基于php/CI)这取决于你做什么样的系统。
说明
例如,如果您有简单的产品添加并且它有许多子表。 (假设 1 个主表和 4 个子表)。因此,一旦其中一个子表抛出错误,数据将保留在上级表中。所以为了防止我们应该在这里使用事务。
假设 Child Table 2
发生错误,并且会发生这种情况(对于插入的数据)。
| Table Name | Normal Insert if |
/update | Transaction |
| ------ | ------ | ------ |
| Master Table | Remain | Roalbacked |
| Child Table 1 | Remain | Roalbacked |
| Child Table 2 | Error | Roalbacked |
| Child Table 3 | Empty | Nothing to do |
| Child Table 4 | Empty | Nothing to do |
有用的链接
-
Transactions - codeigniter.com
My Answer on another question
php-mysql transaction - mysqltutorial.org
【讨论】:
很好解释。这应该添加到 CI 文档中。以上是关于使用 CodeIgniter 事务?的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP / CodeIgniter 中,不止一个事务开始了,而另一个事务没有完成;比如嵌套事务