0
我有从多个浏览器实例通过ajax调用的函数。阻止另一个数据库查询执行,直到一组查询结束
public function update_counters($message)
{
//increment ticket counter
$this->db->where('id', 1);
$this->db->set('ticket', 'ticket+1', FALSE);
$this->db->update('counter');
//increment waiting counter
$this->db->where('id', $message);
$this->db->set('waiting', 'waiting+1', FALSE);
$this->db->update('ambulance');
//get value from ticket counter
$query = $this->db->get_where('counter', array('id' => 1));
$row = $query->row();
//add new row in ticket table
$data = array(
'ticket' => ($row->ticket),
'ambulance' => $message
);
$this->db->insert('ticket', $data);
//
return $row->ticket;
}
这些查询是一个接一个执行的,并且在函数调用较少时工作正常。但是,当更多的用户同时调用该函数或一个用户多次且非常快速地调用该函数时,问题就会发生。问题是第一个(票证柜台)在插入之前会增加两次。这会导致2个插入的行具有相同的票证值。我怎样才能确保下一个应该完成的增量只发生在前一次插入?
阅读关于'TABLE LOCK' https://dev.mysql.com/doc/refman/5.7/en/lock-tables.html google_codeigniter和lock tables_ – JustOnUnderMillions