事務處理(transaction processing)能夠用來維護數據庫的完整性,它保證成批的MySQL操做要麼徹底執行,要麼徹底不執行。數據庫
可是並不是全部的數據庫引擎都支持事務處理。MyISAM和InnoDB是兩種最常使用的引擎。前者不支持明確的事務處理管理,然後者支持。服務器
事務(transaction)指一組SQL語句;ide
回退(rollback)指撤銷指定SQL語句的過程;spa
提交(commit)指將未存儲的SQL語句結果寫入數據庫表;事務
保留點(savepoint)指事務處理中設置的臨時佔位符(placeholder),能夠對它發佈回退(與回退整個事務處理不一樣)。ci
管理事務處理的關鍵在於將SQL語句組分解爲邏輯塊,並明確規定數據什麼時候應該回退,什麼時候不該該回退。it
START TRANSACTION;io
使用如上語句標識事務的開始;table
ROLLBACK命令用來回退(撤銷)MySQL語句:class
下面的示例操做,首先開始一個事務,而後刪除了表account中的全部內容,並查看錶中的內容,顯示錶已被清空。但執行ROLLBACK回退事務後,從新查詢表中的數據。表中的數據依然還在:
start transaction;
delete from account;
select * from account;
rollback;
select * from account;
show create table account;
注意:上例中表account使用的是InnoDB引擎,若一個使用MyISAM引擎的表執行如上操做,則即便ROLLBACK後,能夠發現,數據仍然被實實在在的清空。
通常的MySQL語句都是隱含提交(implicit commit)的,即提交(寫或保存)操做是自動進行的。
可是,在事務處理塊中,提交不會隱含進行。爲進行明確的提交,須要使用COMMIT語句。示例:
start transaction;
delete from account;
commit;
當COMMIT或ROLLBACK語句執行後,啓動的事務會自動關閉。
爲了支持回退部分事務處理,必須在事務處理塊中合適的位置放置保留點。
建立保留點:SAVEPOINTsap_name;
回退至保留點:ROLLBACK TOsap_name;
釋放保留點:RELEASEsp_name;
保留點也能夠在事務處理完成(執行一條ROLLBACK或COMMIT)後自動釋放。
SET autocommit=0;
autocommit標誌是針對每一個鏈接而不是服務器的。