【问题标题】:Using CodeIgniter transactions?使用 CodeIgniter 事务?
【发布时间】: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/…

标签: php mysql codeigniter transactions


【解决方案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 |

有用的链接

  1. Transactions - codeigniter.com
  2. My Answer on another question
  3. php-mysql transaction - mysqltutorial.org

【讨论】:

  • 很好解释。这应该添加到 CI 文档中。
猜你喜欢
  • 2013-02-19
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多