首頁 > 資料庫 > mysql教程 > mysql事務處理機制的使用技巧步驟

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

黄舟
發布: 2016-12-19 17:08:24
原創
1718 人瀏覽過

事務控制
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]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SETSET AUTOMIT = {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來指定需要回溯的事務的位置。

以上就是mysql事務處理機制的使用技巧步驟的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)! 🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板