MySql中的事務

無鞋童鞋發表於2017-08-06

1 事務介紹
  本篇文章我們來介紹資料庫中事務的概念以及如何使用MySQL命令列視窗來進行資料庫的事務操作。事務是聯合操作中我們資料庫穩定運作和資料不發生不可預知錯誤的重要依賴。
  事務是指資料庫中的一組邏輯操作,這個操作的特點就是在該組邏輯中,所有的操作要麼全部成功,要麼全部失敗。在各個資料具有特別緊密的聯絡時,最好是使用資料庫的事務來完成邏輯處理。
2 例項介紹
  我們先假設有一組資料操作是銀行轉賬,A使用者給B使用者轉賬10000元,則MySQL有以下的操作:

update account set count = count - 10000 where name = 'A';
update account set count = count + 10000 where name = 'B';

  在上面兩條SQL語句中,任意一條SQL執行過程中出現了錯誤,或者第一條正常執行,第二條由於網路中斷請求失敗,那麼就有可能造成A與B兩人最後總金額的錯誤。但如果是使用事務來處理,即使上面的轉賬過程出現了錯誤,那麼之前執行的資料庫操作即使成功也會一併回滾,形成所有的SQL操作全部失敗,保證所有人的金額不變。
  MySQL資料庫預設事務是自動提交的,也就是發一條SQL資料庫就執行一條。如果想將多條SQL放置在一個事務中執行,就必須使用如下語句:

    start  transaction
    sql1
    sql2
    …
    commit

  當開啟事務後(start transaction),無論資料庫是否對其中的多條SQL語句是否執行成功,只要沒有提交事務(commit),都會將之前執行的SQL進行回滾。使資料回到開啟事務之前的值。
  在MySQL中,與事務相關的有開啟事務(START TRANSACTION),提交事務(COMMIT),回滾事務(ROLLBACK)等等,下面將依次使用到。
  接下來將會在先使用資料庫命令列視窗來進行事務操作的案例。
 2.1 定義資料庫與表
  首先定義表account和客戶以及金額兩個列資料項:

    create database bank;

    use bank;

    create table account(
         id int primary key auto_increment,
         name varchar(40),
         money double
    );

    insert into account(name,money) values('a',50000);
    insert into account(name,money) values('b',80000);

 2.2 開啟事務模擬轉賬
  接下來我們再開啟事務模擬轉賬,輸入SQL命令,最後提交事務(Commit),來確保這個事務內所有的SQL命令都能被執行成功,依次輸入以下SQL語句:

    start transaction; -- 開啟事務

    update account set money=money-10000 where name=’A’;
    update account set money=money+10000 where name=’B’;

    commit;  -- 提交事務

  上面提交才能真正意義上將所有事務中邏輯命令執行,所以說如果我們想將多條SQL作為整體執行,只要有一個條SQL執行失敗或者資料庫突然出錯就回滾到最開始執行之前的狀態,使用事務是最好的選擇。
 2.3 回滾事務
  最後來看看事務回滾(ROLLBACK)。如果我們在事務處理的過程中,提交事務(Commit)之前,如果想回滾之前的操作,可以使用ROLLBACK這條SQL命令。

rollback;

  注:使用ROLLBACK命令將回滾之前到開啟事務的所有SQL語句,而不會只回滾前面一條SQL命令,因此即使我們對A和B的金額操作了多次,最終還是回到事務開啟前的金額數。
  
  以上就是本文主要想介紹的開啟事務,提交事務和回滾事務三種關於事務的操作。


  參考部落格:
  http://www.cnblogs.com/fjdingsd/p/5272952.html

相關文章