1. 程式人生 > >Spring TransactionTemplate + Mysql事務理解

Spring TransactionTemplate + Mysql事務理解

  1. Mysql事務使用
    1. autocommit說明
    2. 事務使用
    3. 案例
  2. JDBC事務使用
  3. TransactionTemplate對事務的使用
  4. 真實場景

##Mysql事務使用
###autocommit說明
####在Mysql有個屬性叫做autocommit,表示是否自動提交事務,預設值是1,表示true,所以我們一般使用sql語句,執行完就立即更新資料庫了。如果set auotcommit=0之後sql語句執行完之後必須執行commit才能使資料持久化。
###事務使用
mysql可以把一組sql操作放在同一事務裡,要麼全部執行,要麼一個都不執行不執行。
1.開始一個事務start transaction,begin;
2.回滾事務rollback;
3.提交一個事務commit;
4.建立一個儲存點,可以指定回滾到該點savepoint identifier;
5.刪除一個事務的儲存點release savepoint identifier;
6.把事務回滾到標記點 rollback to identifier。如:
begin
sql1,sql2,sql3,sql4…
commit(或rollback)
###案例

begin;  開始一個事務
update score set score=40 where scoreid=1;  
savepoint s1;  建立儲存點
update score set score=50 where scoreid=1;  
select * from score;  
rollback to savepoint s1;  回滾到儲存點
select * from score;  
commit;  提交一個事務

備註:set auotcommit=0後,所有的sql操作都是事務,需要commit;begin開始的只是當前一組sql操作是事務。

##JDBC事務使用

try{    
    connection.setAutoCommit(false);  //不自動提交  
    ......執行jdbc程式碼
    sql1,sql2,sql3    
    connection.commit();   
    }catch(Exception e){    
         connection.roolback();   
    }finally{   
         //清理資源  
         connection.setAutoCommit(true);  //改回自動提交  
   }

##TransactionTemplate對事務的使用
####1.transactionTemplate.execute裡會會通過PlatformTransactionManager.getTransaction獲取一個TransactionStatus例項,在獲取該例項方法中,會呼叫DataSourceTransactionManager的doBegin方法,該方法會執行connection.setAutoCommit(false);
####2.執行一組sql的操作
####3.執行PlatformTransactionManager.commit提交事務
####4.如果有異常transactionStatus.rollbackOnException回滾事務

相關推薦

Spring TransactionTemplate + Mysql事務理解

Mysql事務使用 autocommit說明 事務使用 案例 JDBC事務使用 TransactionTemplate對事務的使用 真實場景 ##Mysql事務使用 ###autocommit說明 ####在Mysql有個屬性叫做autocommit

spring boot mysql 事務

read frame llb source 手工 don clas per oot mysql默認 事務自動提交。即:每條insert/update/delete語句,不需要程序手工提交事務,而是mysql自行提交了。 如果我們想實現程序事務提交,需要事先關閉mysql

使用Spring程式設計式事務TransactionTemplate

使用場景 假如有一個專案設定了資料庫最大連線數為3,然後專案中提供了一個介面,介面中的一個方法會做以下邏輯處理:①首先在資料庫的某個表中查詢出一條記錄,②然後利用該條記錄的資料去調第三方的介面,然後第三方介面放回資料,③最後修改該條記錄的某個欄位的資料然後更新回資料庫。 假設有4個使

Spring】原創 深入理解Spring兄弟事務傳播機制

Spring事務傳播機制    開啟事務的傳播機制 建立兩個方法,這個Service類是被spring容器所掃描的。在該方法上新增@Trancational事務註解。 在insertStudent2()方法上新增上propagation_Require

mysql事務管理及spring宣告式事務中主動異常丟擲使資料庫回滾

原文: http://www.cnblogs.com/wanglonghai/p/4866512.html   mysql的引擎常用的有兩個,一個MyISAM,另一個是InnoDB,mysql預設的為MyISAM,而InnoDB才是支援事務的。所以一般需要修改下

spring管理mybatis事務原始碼理解隨記

mysql中session和connection的關係: mysql中一個session就是一個connection,區別在於,connection是物件池中的一個可複用物件,所以它就是一個物理連線,而session就是connection從物件池中被取出後做

MySQL事務個人理解

事務特性 原子性(Atomicity) 原子是不可分割的,表示一個事務的全部操作只能全部都完成,或全部都不完成(回滾)。 一致性(Consistency) 在事務開始前與結束後,資料庫的資料是一

spring mvc + hibernate 事務管理 + mysql

一:配置事務:datasource.xml <!-- 配置Hibernate事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.

MySQL事務Spring事務管理

dao層 映射文件 cit .sql classpath cat 不能 插入 nested 事務,是在數據庫中用於保證數據正確性的一種機制,涉及到很多概念以及不同的情況,這裏做一個總結 相關概念 事務四特性(ACID) 原子性(Atomicity,或稱不可分割性):要麽全部

五分鐘後,你將真正理解MySQL事務隔離級別!

什麼是事務? 事務是一組原子性的SQL操作,所有操作必須全部成功完成,如果其中有任何一個操作因為崩潰或其他原因無法執行,那麼所有的操作都不會被執行。也就是說,事務內的操作,要麼全部執行成功,要麼全部執行失敗。 事務的結束有兩種,當事務中的所有操作全部成功執行時,事務提交。如果其中一個操作失敗,將發生回滾操

Spring事務專題(三)事務的基本概念,Mysql事務處理原理

# 前言 本專題大綱: ![專欄大綱](https://gitee.com/wx_cc347be696/blogImage/raw/master/image-20200725231232778.png) 我重新整理了大綱,思考了很久,決定單獨將MySQL的事務實現原理跟Spring中的事務示例分為兩篇文

mysql事務處理

特殊 oot count-1 names 系列 種類 date ins 包括 MySQL的事務支持不是綁定在MySQL服務器本身,而是與存儲引擎相關1.MyISAM:不支持事務,用於只讀程序提高性能 2.InnoDB:支持ACID事務、行級鎖、並發 3.Berkeley

atitit.spring hibernate的事務機制 spring不能保存對象的解決

pda 程序 oca roman 配置 轉載 post 本地事務 對象 atitit.spring hibernate的事務機制 spring不能保存對象的解決 sessionFactory.openSession() 不能。。log黑頭馬sql語言..

MySQL : 事務處理

int pre 開啟事務 特點 nbsp rollback code margin 數據 【事務】一組SQL語句操作單元,組內所有SQL語句,完成一個業務。 若整組成功,意味著組內的全部操作都成功; 反之,若其中任何一條語

mysql基礎(六)mysql事務

mysqlmysql事務:是一個獨立的工作單元 事務必須通過ACID測試: 原子性(Atomicity):一個事務的所有操作要麽全部成功執行,要麽全部失敗後回滾 一致性(Consistency):數據庫總是從一個一致性狀態轉換成另一個狀態 隔離性(Isolation):一個事務在做出

spring如何控制事務

切面 進行 具體類 控制 編程 面向切面 程序 管理 最大的 Spring 的事務,可以說是 Spring AOP 的一種實現。 AOP面向切面編程,即在不修改源代碼的情況下,對原有功能進行擴展,通過代理類來對具體類進行操作。 spring是一個容器,通過sp

mysql-優化班學習-12-20170627-MySQL事務

src flush image when 數據 分享 mysql事務 log 學習 mysql-優化班學習-12-20170627-MySQL事務 MyRocks也支持事務 innodb_flush_log_at_trx_commit = 1sync_binl

MySQL 事務與鎖機制

mysql下表展示了本人安裝的MariaDB(10.1.19,MySQL的分支)所支持的所有存儲引擎概況,其中支持事務的有InnoDB、SEQUENCE,另外InnoDB還支持XA事務,MyISAM不支持事務。鎖可以通過SQL語句(如 LOCK TABLES )顯式申請,也可以由InnoDB引擎自動為你獲取。

mysql事務隔離級別與鎖的關系

美團 enc 自己 ren 問題總結 關系 sql 事務 sql事務 其實操作了這麽久mysql一直也沒有把mysql中事務跟鎖的關系弄得特別清楚。然後搜到美團這篇文章,順便結合一下自己遇到的問題總結一下。 首先事務有四種隔離級別: Refere

Spring 實現部分事務回滾

light back true prop 回滾 sage .class lba aaa 例如有業務需求,在catch異常後,catch塊內把異常的信息存入到數據庫,而catch外的數據全部回滾 try { ....... aaaService.save();