当另一个事务在同一个表上运行时,Codeigniter事务可以启动吗?

时间:2017-11-14 06:22:41

标签: php mysql codeigniter transactions

我的模型名为demon_model,包含如下方法:

class Hell_model extends CI_Model {
   function insert_demon_to_hell()
   {
       $this->db->trans_start();
       //insert to helldb for example
       //update to helldb for example
       $this->db->trans_complete();
   }
}

我有像这样的控制器名为demon_controller

//REST CONTROLLER INCLUDED HERE

class Demon_controller extends REST_CONTROLLER {
    function contruct() {
        //LOAD HELL MODEL HERE
    }

    function demon () {
       $demon_id = $this->get('demon_id');
       $this->hell_model->insert_demon_to_hell($demon_id);
    }
}

当有人遇到恶魔时,此API会调用。问题是,当两个或两个以上的人在同一时间遇到恶魔(调用函数)时,即使我已经在模型函数中使用了事务,查询仍会在同一个表上运行吗?

1 个答案:

答案 0 :(得分:1)

事务不控制并发性,它们只是确保完成所有修改或不完成任何修改。控制并发的是locking mechanism

因此,同时运行的交易数量在理论上是无限的。但是,它们可以做什么以及何时可以通过事务中的语句隐式或显式设置的锁来限制。

更重要的是:db->trans_start()启动数据库事务,而不是CI事务。这意味着事务仅适用于在数据库级别上执行的更改,而不适用于在CI级别上执行的更改。例如。如果对属性更改为未在数据库中持久化的CI对象,则回滚不会影响该属性的值。