程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql事務處理機制的使用技巧步驟

mysql事務處理機制的使用技巧步驟

編輯:關於MYSQL數據庫
MySQL通過SET AUTOCOMMIT, START TRANSACTION, COMMIT和ROLLBACK等語句支持本地事務。

事務控制
MySQL通過SET AUTOCOMMIT, START TRANSACTION, COMMIT和ROLLBACK等語句支持本地事務。
語法:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
默認情況下,mysql是autocommit的,如果需要通過明確的commit和rollback來提交和回滾事務,那麼需要通過明確的事務控制命令來開始事務,這是和oracle的事務管理明顯不同的地方,如果應用是從Oracle數據庫遷移到MySQL數據庫,則需要確保應用中是否對事務進行了明確的管理。
START TRANSACTION或BEGIN語句可以開始一項新的事務。
COMMIT和ROLLBACK用來提交或者回滾事務。
CHAIN和RELEASE子句分別用來定義在事務提交或者回滾之後的操作,chain會立即啟動一個新事物,並且和剛才的事務具有相同的隔離級別,release則會斷開和客戶端的連接。
SET AUTOCOMMIT可以修改當前連接的提交方式,如果設置了SET AUTOCOMMIT=0,則設置之後的所有事務都需要通過明確的命令進行提交或者回滾。
如果我們只是對某些語句需要進行事務控制,則使用START TRANSACTION開始一個事務比較方便,這樣事務結束之後可以自動回到自動提交的方式,如果我們希望我們所有的事務
都不是自動提交的,那麼通過修改AUTOCOMMIT來控制事務比較方便,這樣不用在每個事務開始的時候再執行START TRANSACTION。
因此,在同一個事務中,最好不使用不同存儲引擎的表,否則rollback時需要對非事務類型的表進行特別的處理,因為commit、rollback只能對事務類型的表進行提交和回滾。
通常情況下,只對提交的事務紀錄到二進制的日志中,但是如果一個事務中包含非事務類型的表,那麼回滾操作也會被記錄到二進制日志中,以確保非事務類型表的更新可以被復制到從的數據庫中。
和Oracle的事務管理相同,所有的DDL語句是不能回滾的,並且部分的DDL語句會造成隱式的提交。
在事務中可以通過定義savepoint,指定回滾事務的一個部分,但是不能指定提交事務的一個部分。對於復雜的應用,可以定義多個不同的savepoint,滿足不同的條件時,回滾不同的 savepoint。需要注意的是,如果定義了相同名字的savepoint,則後面定義的savepoint會覆蓋之前的定義。 對於不再需要使用的savepoint,可以通過release savepoint命令刪除savepoint,刪除後的savepoint,不能再執行rollback to savepoint命令。
下面我們例子就是模擬回滾事務的一個部分,通過定義savepoint來指定需要回滾的事務的位置。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved