關於thinkphp連貫操作加鎖的詳細介紹lock
我以為可以減少下訂單出錯的辦法
首先,資料庫型別要是InnoDB,其次,加鎖必須跟事務同時使用,還有,查詢的時候都必須帶鎖,比如: $user_mod->lock(true)->where('id=1')->select();這個地方用鎖查詢,其次地方如果查詢這個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();//事務提交
$this->success('成功提示');
加上lock(true)的實際就是在查詢語句最後加上 for update,可以用如下這種方法測試,開兩個視窗,一個視窗開啟事務,然後查詢加鎖一條資料,另一個視窗再次查詢加鎖這條資料,你會發現另一個視窗的查詢會一直等待,直到第一個視窗的事務提交。如圖:
相關文章
- 關於無線通訊的核心技術詳細介紹
- 關於keras框架的介紹以及操作使用Keras框架
- Kafka詳細介紹Kafka
- javascript this詳細介紹JavaScript
- ApplicationContext 詳細介紹APPContext
- JDBC 詳細介紹JDBC
- Ifconfig詳細介紹
- Git詳細介紹Git
- 註解的詳細介紹
- Http Module 的詳細介紹HTTP
- 詳細介紹php和apache的關係和作用PHPApache
- CodeIgniter框架的AR連貫操作框架
- 關於python操作excel,xlwt,xlwd,最簡單的操作介紹PythonExcel
- Spring bean詳細介紹SpringBean
- python字典詳細介紹Python
- Nacos 介面詳細介紹
- SOLIDWORKS API詳細介紹SolidAPI
- Go Channel 詳細介紹Go
- spring @component 的作用詳細介紹Spring
- 【連載 08】lock 鎖
- PHP 的Closure的bind 詳細介紹PHP
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- LVM詳細介紹及建立LVM
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- 【SCN】Oracle SCN 詳細介紹Oracle
- Java異常詳細介紹Java
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- BN(Batch Normalization)層的詳細介紹BATORM
- rqt的安裝及詳細介紹QT
- 超詳細的介紹Python語句Python
- 恆訊科技詳細介紹:保加利亞伺服器機房伺服器
- 關於 ReentrantLock 中鎖 lock() 和解鎖 unlock() 的底層原理淺析ReentrantLock
- 兄弟連golang神技(1)-關於 Go 語言的介紹Golang
- 簡單介紹redis加鎖常用幾種方式Redis
- Dart語言詳解(一)——詳細介紹Dart
- pyhanlp 文字聚類詳細介紹HanLP聚類
- TreeViewTemplate移動元件詳細介紹View元件
- oracle 大頁配置詳細介紹Oracle