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