[MYSQL -26]控制事務處理
1、事務處理
支援事務處理的引擎為InnoDB,不支援的為MyISAM.
事務處理作用:可以用來維護資料庫的完整性,它保證成批的MYSQL操作要麼完全執行,要麼完全不執行。
事務處理是一種機制,用來管理必須成批執行的MYSQL操作,以保證資料庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,它們或者作為整體執行,或者完全不執行(除非明確指示)。如果沒有錯誤發生,整組語句提交給(寫到)資料庫表。如果發生錯誤,則進行回退(撤銷)以恢復到某個已知且安全的狀態。
術語
事務(transaction): 指一組SQL語句;
回退(rollback):指撤銷指定SQL語句的過程;
提交(commit):指將未儲存的SQL語句結果寫入到資料庫表;
保留點(savepoint):指事務處理中設定的臨時佔位符,你可以對它釋出回退(與回退整個事務處理不同)
2、控制事務處理
關鍵:在於將SQL語句分解為邏輯塊,並明確規定資料何時應該回退,何時不應該回退。
2.1使用ROLLBACK
MYSQL的ROLLBACK命令用來回退(撤銷)MYSQL語句。
SELECT * FROM ordertotal;
START TRANSACTION;
DELETE FROM ordertotal;
SELECT * FROM ordertotal;
ROLLBACK;
SELECT * FROM ordertotal;
這個例項顯示ordertotals表的內容開始。
- 首先執行一條SELECT以顯示該表不為空。
- 然後開始一個事務處理,用一條DELETE語句刪除ordertotals中的所有行。
- 另一條SELECT語句驗證ordertotals確實為空。
- 這時用一條ROLLBACK語句回退SATRT TRANSACTION之後的所有語句。
- 最後一條SELECT語句顯示該表不為空。
顯然,ROLLBACK只能在一個事務處理中使用(在執行一條START TRANSACTION命令之後)
事務處理用來管理INSERT、UPDATE和DELETE語句。你不能回退SELECT語句。你不能回退CREAT和DROP操作。事務處理塊中可以使用者兩條語句,但是你執行回退,它們不會被撤銷。
2.2使用COMMIT
一般MYSQL語句都是直接針對資料表執行和編寫的。這就是所謂的隱含提交,即提交(寫或儲存)操作是自動進行的。
但是,在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用COMMIT語句,如下所示:
START TRANSACTION;
DELIMITER //
DELETE FROM orderitems WHERE order_num=20010;
DELETE FROM orders WHERE order_num=20010;
COMMIT //
DELIMITER ;
最後的COMMIT語句僅僅在不出錯時候寫出更改。如果第一條DELETE起作用,但第二條失敗,則DELETE不會更改(實際上,它是被自動撤銷的)
- 隱含事務關閉:當COMMIT或者ROLLBACK語句執行後,事務自動關閉(將來的更改會隱含提交)
2.3使用保留點
簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更復雜的事務處理可能需要部分提交或回退。
為了支援部分事務處理,必須能在事務處理塊中合適的位置放置佔位符。這樣如果回退,可以回退到某個佔位符。這些站位符稱為保留點。為了建立佔位符,可以使用SAVEPOINT語句。
SAVEPOINT delete1;#保留點設定
ROLLBACK TO delete1;#回退到給出的保留點
每個保留點都取標識它的唯一名字,以便在回退時,MYSQL知道要回退到何處。
- 保留點越多越好
可以在MYSQL程式碼中設定任意多的保留點,保留點越多越好。因為越多,就越能按照自己的意願靈活的進行回退。 - 釋放保留點
保留點在事務處理中完成(執行一條ROLLBACK或COMMIT)後自動釋放。自MYSQL5以來,也可以用RELEASE SAVEPOINT明確地釋放保留點。
2.4更改預設的提交行為
預設的提交行為識自動提交所有更改。執行一條SQL語句,實際針對表執行,而且所做的更改立刻生效。為指示MYSQL不自動提交更改,需使用以下語句:
SET autocommit=0;
autocommit標誌決定是否自動提交更改,不管有沒有COMMIT語句。
設定為0時指示MYSQL不自動提交更改(直到autocommit被設定為真為止)。autocommit針對每個連線,而不是伺服器的。
相關文章
- MySQL事務處理MySql
- MYSQL--事務處理MySql
- mysql事務處理(轉)MySql
- MySQL中的事務處理MySql
- 26. 使用MySQL之管理事務處理MySql
- mysql事務處理與鎖機制MySql
- 分散式事務處理方案,微服事務處理方案分散式
- 【Mysql】mysql事務處理用法與例項詳解MySql
- Spring事務專題(三)事務的基本概念,Mysql事務處理原理SpringMySql
- 12事務處理
- mysqli 事務處理MySql
- MySQL中不得不提的事務處理MySql
- nodejs 連線 mysql 查詢事務處理NodeJSMySql
- MySQL的事務處理及隔離級別MySql
- 我的MySql事務處理(可以支援事務處理及資料庫路徑自己定義) (轉)MySql資料庫
- ITL與事務處理
- redis的事務處理Redis
- php事務處理方法PHP
- java事務的處理Java
- SpringDataRedis事務處理SpringRedis
- mysql 事務處理及表鎖定深入簡析MySql
- Laravel 分散式事務處理Laravel分散式
- springboot事務處理Spring Boot
- Spring (二) 事務處理Spring
- 分散式事務故障處理分散式
- JDBC事務處理設計JDBC
- SQL SERVER 事務處理(一)SQLServer
- sql server 事務處理(二)SQLServer
- 事務處理基本概念
- MySQL入門--事務控制語句MySql
- JDBC 事務處理【最終版】JDBC
- PLSQL Language Referenc-PL/SQL靜態SQL-事務處理和控制SQL
- springcloud分散式事務處理 LCNSpringGCCloud分散式
- Oracle分散式事務典型案例處理Oracle分散式
- Entity Framework中 批量提交 事務處理Framework
- C#處理Access中的事務C#
- 【開發篇plsql】plsql事務處理SQL
- 軟體中事務處理問題!