事務處理html
並不是全部引擎都支持事務處理,MySQL支持集中基本的數據庫引擎。MyISAM和InnDB是兩種最經常使用的數據庫引擎。前者不支持明確的的事務處理管理,然後者支持。事務處理(transaction processing)能夠用來維護數據庫的完整性,它保證成批的MySQL操做要麼徹底執行,要麼徹底不執行。若是沒有發生錯誤,整組語句提交到(寫入)數據庫表。若是發生錯誤,則進行回退(撤銷)以恢復數據庫到某個已知且安全的狀態。sql
事務(transaction):指一組SQL語句;數據庫
回退(rollback):指撤銷指定SQL語句的過程;安全
提交(commit):指將未存儲的SQL語句結果寫入數據庫表;服務器
保留點(savepoint):指事務處理中國設置的臨時佔位符(placeholder),你能夠對它發佈回退(與回退整個事務處理不一樣)。htm
控制事務處理blog
管理事務處理的關鍵在於將SQL語句分解成邏輯快,並明確的規定數據什麼時候應該回退,什麼時候不該該回退。事務
MySQL語句使用下面的語句來標識事務的開始:ci
START TRANSACTION
使用ROLLBACKget
MySQL的ROLLBACK命令用來回退(撤銷)MySQL語句,ROLLBACK只能在一個事務處理內使用(在執行一條START TRANSACTION命令以後)。ROLLBACK不能回退CREATE和DROP操做,即使執行回退,它們也不會被撤銷。
使用COMMIT
通常的MySQL語句都是直接針對數據庫表執行和編寫的。這就是所謂的隱含提交(implicit commit),即提交(寫或保存)操做是自動進行的。
可是,在事務處理塊中,提交不會隱含地進行。爲進行明確的提交,使用COMMIT語句。以下所示:
START TRANSACTION; DELETE FROM ordertimes WHERE order_num=20010; DELETE FROM orders WHERE order_num=20010; COMMIT;
第二條DELETE語句失敗,則DELETE不會提交。(實際上,它是被自動撤銷的)。隱含事務關閉:當COMMIT或ROLLBACK語句執行後,事務會自動關閉(未來的更改會隱含提交)。
使用保留點
簡答的ROLLBACK和COMMIT語句就能夠寫入或撤銷整個事務處理。可是,只是對簡單的事務處理才能這樣作,更復雜的事務處理可能須要部分提交或回退。
爲了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置佔位符。這樣,若是須要回退,能夠回退到某個佔位符。這些佔位符稱爲保留點。爲了建立佔位符,可以下使用SAVEPOINT語句:
SAVEPOINT delete1;
每一個保留點都取標識它的惟一名字,以便在回退時,M有SQL知道要回退到何處。爲了回退到本例給出的保留點,可以下進行:
ROLLBACK TO delete1;
保留點越多越好。由於保留點越多,就越能按本身的意願靈活的進行回退。
釋放保留點:保留點在事務處理完成(執行一條ROLLBACK或COMMIT)後自動釋放。固然也能夠明確的釋放保留點:
RELEASE SAVEPOINT;
更改默認的提交行爲:
正如所述,默認的MySQL行爲是自動提交全部更改。換句話說,任什麼時候候你執行一條MySQL語句,該語句實際上都是針對表執行的,並且所作的更改當即生效。爲指示MySQL不自帶提交更改,須要使用如下語句:
SET autocommit=0;
autommit標誌決定是否自動提交更改,無論有沒有COMMIT語句。設置autocommit爲0(假)指示MySQL不自動提交更改(直到autocommit被設置爲真爲止)。
autocommit標誌是針對每一個鏈接而不是整個服務器的。