MySQL事務小結

事務基本特性(ACID)

  1. 原子性(Atomicity):事務開始後全部操做,要麼所有作完,要麼所有不作,不可能停滯在中間環節。事務執行過程當中出錯,會回滾到事務開始前的狀態,全部的操做就像沒有發生同樣。也就是說事務是一個不可分割的總體,就像化學中學過的原子,是物質構成的不可分割單位。
  2. 一致性(Consistency):事務開始前和結束後,數據庫的完整性約束沒有被破壞 。
  3. 隔離性(Isolation):同一時間,只容許一個事務請求同一數據,不一樣的事務之間彼此沒有任何干擾。
  4. 持久性(Durability):事務完成後,事務對數據庫的全部更新將被保存到數據庫,不能回滾。

事務語句

MySQL使用以下的語句來標識事務的開始:數據庫

start transaction

或者測試

begin

事務成功後,使用以下的語句來標識事務的成功:code

commit

當事務邏輯出現異常時,可使用以下的語句來標識事務的取消:事務

rollback

事務操做

事務處理用來管理 INSERT 、UPDATE 和 DELETE 語句,沒法管理不會改變數據的 SELECT 查詢語句,也沒法管理 CREATE 或 DROP 操做。事務操做隔離了其中被操做數據狀態改變的可見性,同時使事務內的屢次數據更新操做具備了原子性,即要麼同時成功,要麼所有失敗。ci

建立測試表 test:it

create table test(a int, b char(5));

執行事務操做:io

start transaction;

insert into test values('1', 'right');
insert into test values('2', 'wrong');
update test set b = 'right' where a = 2;
select * from test;

commit;

上述操做中,一個事務內包含兩次獨立的插入操做和一次更新操做,以及一次查詢所有數據的操做。因爲事務的隔離性,當事務結束前,其餘鏈接的查詢語句將沒法查詢到插入的這兩條數據,也沒法對其進行更新操做,只有處於同一事務的查詢語句和更新語句能夠針對該新插入的數據進行查詢或更新。當執行了 commit 語句後,該事務內的操做將所有生效,使其餘鏈接也能夠對此事務更新後的數據進行操做。table

當上述事務中的語句若是出現執行失敗,或在事務提交前執行了 rollback 語句,那麼無論語句已經執行成功了多少條,其數據庫狀態都將恢復到所有語句執行以前的狀態。test

相關文章
相關標籤/搜索