在開始接觸開發以前,就聽說過轉帳系統會碰到這樣一個情況:
假設有一個表,有User以及Money兩個字段,Money設置上限為2億。
User A 轉帳10億給User B,那我們如果直接寫SQL,
那麼我們可能會先檢查User A有沒有100億,然後將User A的money減去10億,然後將User B的money增加10億。
我們可能碰到一個情況,在將User A的Money減去10億以後,發現User B的Money如果增加10億,則會超過上限。
但是我們已經操作了”將User A 的Money減去10億“,然後執行”User B的Money增加10億“才報錯。
這樣就出大問題了。
查閱了資料,為了防止這樣的情況出現,會需要用到回滾(roll back)這樣的操作,在執行一系列SQL語句過程中,如果發生錯誤,則回滾已經執行的內容。
CodeIgniter Transaction的使用:
$this->db->trans_start();
$this ->db -> insert(‘user’,$i_data);
$this -> db ->insert(‘score’,$i_data2);
$this->db->trans_complete();
如果insert score的時候發生了問題,則已經執行的inser user會回滾。