上一篇:【MySQL必知必會(二十一)】【使用觸發器】
+++++++++++++開始線++++++++++++++++
文章目錄
- 一、 事務處理
- 二、 控制事務處理
- 2.1 使用ROLLBACK
- 2.2 使用COMMIT
- 2.3 使用保留點
- 2.4 更改默認的提交行為
一、 事務處理
并非所有引擎都支持事務處理
MyISAM和InnoDB是兩種最常使用的引擎,前者不支持明確的事務處理管理,而后者支持,
事務處理(transaction processing)可以用來維護資料庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行,
事務處理是一種機制,用來管理必須成批執行的MySQL操作,以保證資料庫不包含不完整的操作結果,利用事務處理,可以保證一組操作不會中途停止,它們或者作為整體執行,或者完全不執行,如果沒有錯誤發生,整組陳述句提交給資料庫表,如果發生錯誤,則進行回退以恢復資料庫到某個已知且安全的狀態,
事務(transaction)指一組SQL陳述句
回退(rollback)指撤銷指定SQL陳述句的程序
提交(commit)指將為存盤的SQL陳述句結果寫入資料庫表
保留點(savepoint)指事務處理中設定的臨時占位符,你可以對它發布回退
二、 控制事務處理
管理事務處理的關鍵就是在與將SQL陳述句組分解為邏輯塊,并明確規定資料何時應該回退,何時不應該回退,
標識事務的開始
START TRANSACTION
2.1 使用ROLLBACK
ROLLBACK命令用來回退MySQL陳述句
mysql> SELECT * FROM ordertotals;
-> START TRANSACTION;
-> DELETE FROM ordertotals;
-> SELECT * FROM ordertotals;
-> ROLLBACK;
-> SELECT * FROM ordertotals;
-> //
分析
首先執行一條SELECT以顯示該表不為空,然后開始一個事務處理,用一條DELETE陳述句洗掉ordertotals中的所有行,另一條SELECT陳述句驗證ordertotals確實為空,這時用一條ROLLBACK陳述句回退START
TRANSACTION之后的所有陳述句,最后一條SELECT陳述句顯示該表不為空,
2.2 使用COMMIT
一般的MySQL陳述句都是直接針對資料庫表執行和撰寫的,這就是隱含提交,即提交操作是自動進行的,
在事務處理時,提交不會隱含地進行,為進行明確的提交,使用COMMIT陳述句
mysql> START TRANSACTION
-> DELETE FROM orderitems WHERE order_num = 20010;
-> DELETE FROM orders WHERE order_num = 20010;
-> COMMIT;
-> //
分析
從系統中完全洗掉訂單20010,涉及更新兩個資料庫表orders和orderItems,所以使用事務處理快來保證訂單不被部分洗掉,最后的COMMIT陳述句僅在不出錯時寫出更改,如果第一條DELETE起作用,但第二條失敗,則DELETE不會提交,
隱含事務關閉
當COMMIT或ROLLBACK陳述句執行后,事務會自動關閉
2.3 使用保留點
為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符,這樣如果回退,可以回退到某個占位符,
創建占位符
SAVEPOINT delete1;
每個保留點都取標識它的唯一名字,以便在回退時,MySQL知道回退到何處,回退到保留點
ROLLBACK TO delete1;
保留點越多越好
保留點越多,可以靈活地進行回退
釋放保留點
保留點在事務處理完成后自動釋放
2.4 更改默認的提交行為
默認的MySQL行為是自動提交所有更改,任何時候你執行一條MySQL陳述句,該陳述句實際上都是針對表執行的,而且所作的更改立即生效,
mysql> SET autocommit=0;
分析
autocommit標志決定是否自動提交更改,為假則不自動
標志為連接專用
autocommit標志是針對每個連接而不是服務器的,
+++++++++++++結束線++++++++++++++++
下一篇:【MySQL必知必會(二十三)】【全球化和本地化】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/163684.html
標籤:其他
