ThinkPHP5中的事務操作
官方手冊裡的事務操作
1.自動控制事務處理(匿名函式方式)
Db::transaction(function(){
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
});
2.手動控制事務
// 啟動事務
Db::startTrans();
try{
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事務
Db::commit();
} catch (\Exception $e) {
// 回滾事務
Db::rollback();
}
除了官方推薦方式,我們也可以另外使用模型來控制事務
$test1Model=new Test1Model;
$test2Model=new Test2Model;
$test1Model->startTrans();
try{
$test1Model->where('id','eq',1)->delete();
$test2Model->where('id','eq',1)->delete();
$test1Model->commit();
}catch(\Exception $e){
$test1Model->rollback();
}
需要注意的幾個方面是
- 使用事務處理的話,需要資料庫引擎支援事務處理。 比如 MySQL 的MyISAM 不支援事務處理,需要使用InnoDB 引擎
- 注意在事務操作的時候,確保你的資料庫連線是相同的
- 業務上的出錯和資料庫操作的出錯是不同的,你可能需要自己捕獲業務上的出錯資訊
相關文章
- .NET中事務操作小結(1)
- mongodb 的事務性操作MongoDB
- Redis事務操作Redis
- MySQL 事務操作MySql
- 編輯 Java 中的事務 — JDBC 事務和 JTA 事務JavaJDBC
- MongoDB 中的事務MongoDB
- MyBatis中的事務MyBatis
- Redis 中的事務Redis
- oracle 中的事務Oracle
- MySql中的事務MySql
- 事務基本定義操作
- Go 語言操作 MySQL 之 事務操作GoMySql
- MySQL 中的事務理解MySql
- sqlserver遇到回滾事務的操作策略SQLServer
- SAP取消操作的事務碼-待完成
- Redis系列之key操作命令與Redis中的事務詳解(六)Redis
- 關於流資料上的事務操作
- PHP中的PDO操作學習(二)預處理語句及事務PHP
- 【JAVA高階】——吃透JDBC中的事務及事務的封裝JavaJDBC封裝
- MySQL中的事務和MVCCMySqlMVC
- MySQL 中的事務詳解MySql
- Spring中的事務控制Spring
- Spring 中的事務管理Spring
- JDBC中事務的問題JDBC
- MySQL中的事務處理MySql
- Redis 中的事務分析,Redis 中的事務可以滿足ACID屬性嗎?Redis
- 記在 Hyperf 中多庫連線操作事務注意事項
- 主從分離的事務操作很容易發生誤操作
- 一個事務插入,另外一個事務更新操作,是否會更新成功?
- 事務使用中如何避免誤用分散式事務分散式
- (四)Spring中的事務管理Spring
- SQL Server中的事務與鎖SQLServer
- oracle事務中的儲存點Oracle
- Spring中的事務提交事件Spring事件
- 基於可靠訊息方案的分散式事務(二):Java中的事務分散式Java
- 比較微服務中的分散式事務模式微服務分散式模式
- Spring中的AOP,以及宣告式事務 @Transactional無法攔截事務Spring
- net中的4種事務總結