關於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,可以用如下這種方法測試,開兩個視窗,一個視窗開啟事務,然後查詢加鎖一條資料,另一個視窗再次查詢加鎖這條資料,你會發現另一個視窗的查詢會一直等待,直到第一個視窗的事務提交。如圖:
相關文章
- thinkPHP空模組和空操作、前置操作和後置操作詳細介紹(十四)PHP
- thinkPHP模板中的語法知識詳細介紹(十二)PHP
- 關於無線通訊的核心技術詳細介紹
- ThinkPHP框架檢視詳細介紹View檢視–模板(九)PHP框架View
- Linux Awk 陣列操作詳細介紹Linux陣列
- 關於keras框架的介紹以及操作使用Keras框架
- javascript this詳細介紹JavaScript
- JDBC 詳細介紹JDBC
- Kafka詳細介紹Kafka
- Git詳細介紹Git
- 基於佇列的鎖:mcs lock簡介佇列
- Http Module 的詳細介紹HTTP
- asmcmd工具的詳細介紹ASM
- Mysqldump工具的詳細介紹MySql
- 詳細介紹php和apache的關係和作用PHPApache
- 關於PHP檔案操作的簡單介紹PHP
- Go Channel 詳細介紹Go
- Nacos 介面詳細介紹
- MQ詳細命令介紹MQ
- Recovery命令詳細介紹
- Vmstat 命令詳細介紹
- Apache (http server)的詳細介紹ApacheHTTPServer
- PHP 的Closure的bind 詳細介紹PHP
- CodeIgniter框架的AR連貫操作框架
- Thinkphp框架擴充包使用方式詳細介紹–驗證碼例項(十一)PHP框架
- 關於python操作excel,xlwt,xlwd,最簡單的操作介紹PythonExcel
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- python字典詳細介紹Python
- Spring bean詳細介紹SpringBean
- Java異常詳細介紹Java
- 【SCN】Oracle SCN 詳細介紹Oracle
- SOLIDWORKS API詳細介紹SolidAPI
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- mysql binlog詳細介紹MySql
- java泛型詳細介紹Java泛型
- 【工具】Sublime使用詳細介紹
- json詳細介紹(for Java)JSONJava