管理事務處理

  事務處理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標誌是針對每一個鏈接而不是整個服務器的。

相關文章
相關標籤/搜索