再一個系列同時操做多種表的話 最好是用事務, 這樣不容易出錯web
數據庫類型要是InnoDB,數據庫
加鎖必須跟事務同時使用,this
查詢的時候都必須帶鎖,spa
好比: $user_mod->lock(true)->where('id=1')->select();orm
這個地方用鎖查詢,若是查詢這個user對象須要防止同時操做的話也要進行加鎖,就是也要用lock(true)這種方式查詢對象
- M()->startTrans();//開啓事務
- $map['userid']='test';//查詢條件
- $user = M('User')->lock(true)->where($map)->find();//加鎖查詢
- if($user)
- {
- //執行你想進行的操做, 最後返回操做結果 result
- $result = true;
- if(!$result)
- {
- M()->rollback();//回滾
- $this->error('錯誤提示');
- }
- }
- M()->commit();//事務提交
- 加上lock(true)的實際就是在查詢語句最後加上 for update
- $this->success('成功提示');