MySQL事務處理

2022-04-05 09:34:18 字數 2067 閱讀 1749

< doctype html public -wcdtd xhtml stricten httpwwwworgtrxhtmldtdxhtml-strictdtd> start transaction, commit和rollback語法 start transaction | begin [work]

commit [work] [and [no] chain] [[no] release]

rollback [work] [and [no] chain] [[no] release]

set autocommit =

start transaction或begin語句可以開始一項新的事務。commit可以提交當前事務,是變更成為永久變更。rollback可以 回滾當前事務,取消其變更。set autocommit語句可以禁用或啟用預設的autocommit模式,用於當前連線。

預設情況下,mysql採用autocommit模式執行。這意味著,當您執行乙個用於更新(修改)表的語句之後,mysql立刻把更新儲存到磁碟中。

如果您正在使用乙個事務安全型的儲存引擎(如innodb, bdb或ndb簇),則您可以使用以下語句禁用autocommit模式:

set autocommit=0;

通過把autocommit變數設定為零,禁用autocommit模式之後,您必須使用commit把變更儲存到磁碟中,或著如果您想要忽略從事務開始進行以來做出的變更,使用rollback。

如果您想要對於乙個單一系列的語句禁用autocommit模式,則您可以使用start transaction語句:

start transaction;

select @a:=sum(salary) from table1 where type=1;

update table2 set summary=@a where type=1;

commit;

使用start transaction,autocommit仍然被禁用,直到您使用commit或rollback結束事務為止。然後autocommit模式恢復到原來的狀態。

您也可以按照如下方法開始一項事務:

start transaction with consistent snapshot;

with consistent snapshot子句用於啟動乙個一致的讀取,用於具有此類功能的儲存引擎。目前,該子句只適用於innodb。該子句的效果與發布乙個start transaction,後面跟乙個來自任何innodb表的select的效果一樣。請參見15.2.10.4節,「一致的非鎖定讀」。

開始一項事務會造成乙個隱含的unlock tables被執行。

為了獲得最好的結果,事務應只使用由單一事務儲存引擎管理的表執行。否則,會出現以下問題:

如果您使用的表來自多個事務安全型儲存引擎(例如innodb和bdb),並且事務隔離等級不是serializable,則有可能當乙個事務提交時,其它正在進行中的、使用同樣的表的事務將只會發生由第乙個事務產生的變更。也就是,用混合引擎不能保證事務的原子性,並會造成不一致。(如果混合引擎事務不經常有,則您可以根據需要使用set transaction isolation level把隔離等級設定到serializable。)

如果您在事務中使用非事務安全型表,則對這些表的任何變更被立刻儲存,不論autocommit模式的狀態如何。

如果您在更新了事務中乙個事務表之後,發布乙個rollback語句,則會出現乙個er_warning_not_complete_rollback警告。對事務安全型表的變更被 回滾,但是對非事務安全型表沒有變更。

每個事務被儲存在乙個組塊中的二進位制日誌中,在commit之上。被回滾的事務不被計入日誌。(例外情況:對非事務表的更改不會被 回滾。如果乙個被回滾的事務包括對非事務表的更改,則整個事務使用乙個在末端的rollback語句計入日誌,以確保對這些表的更改進行複製。)

您可以使用set transaction isolation level更改事務的隔離等級。

回滾可以慢速執行。在使用者沒有明確要求時,也可以進行回滾(例如,當錯誤發生時)。因此,在明確地和隱含的(rollback sql命令)回滾時,show processlist會在stage列中顯示rolling back,用於連線。

#資料庫技術

MySQL事務處理

start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...

mysql事務處理

mysql的事務處理主要有兩種方法 1.用begin,rollback,commit來實現 begin開始乙個事務 rollback事務回滾 commit 事務確認 2.直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,就直接執行!可以通過 set ...

mysql事務處理

事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 1 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...