1. 程式人生 > >事務控制語言DTL

事務控制語言DTL

寫入 inf order 不執行 art 特點 更改 決定 多個

一、什麽是事務?

·  數據庫中的事務,是指可以將“多條相關語句執行”看做是“一條語句執行”的一種內部機制。即事務是一種可以保證“多條語句一次性執行完成”或者一條語句都不執行的機制。

三、事務的特點

  • 原子性--事務中的語句,應該都能做到,要麽全部完成,要麽都不做。
  • 一致性--讓數據保持邏輯上的“合理性”
  • 隔離性--如果多個事務同時並發執行,但每個事務就像獨立運行一樣
  • 持久性--一個事務執行成功,就明確物理硬盤的數據改變

四、事務模式

  事務模式:就是讓每條執行語句當做“一個事務”的設定項。

  •   mysql安裝好之後,默認其事務模式是:一條語句就是一個事務既(autocommit=1)
  •   可以將其設定為“認可”模式--既執行“commit;”語句才生效 ,set autocommit=0,關閉該模式示例:

  技術分享圖片

update test set num=20 where id = 1;

  技術分享圖片更改事務模式

 set autocommit = 0;

技術分享圖片再次執行更改數據語句:

 update test set num=31 where id = 1;

  結果:技術分享圖片執行 commit;  技術分享圖片

五、事務的基本執行流程

  1. 事務聲明開始:start transaction;
  2. 設定多條要執行的具體語句。比如,inesert,update,delete,...
    1. 其實只是“執行”,並不“‘生效’”--只是在內存狀態下的執行,而不是在物理狀態的執行
  3. 判斷是否需要執行這些語句:

    if(判斷錯誤條件) {

      //語句執行;

      commit;//這時才生效--物理狀態既寫入硬盤

    }

    else {

      rollback;//回滾--不執行任何語句

    }

    判斷錯誤條件通常在以下2種環境:

    1. 命令行(cmd)環境,直接觀察
    2. 如果是php程序,用mysqli_error()函數判斷

二、為什麽需要事務?

  舉例:

id account(賬戶) deposit(存款)
1 test01 1000
2 test02 5000

  表(saving)

  test01和test02認識且在不同城市,test01想購買iPhone7(5000元),想向test02借4000元,上圖為2人在銀行存款

  銀行轉賬:

    第一步:update saving set deposit=deposit-4000 where id = 2;

    第二步:update saving set deposit=deposit+4000 where id = 1;

    如果上面2步都沒有錯誤,則執行:

    commit;//執行

    如果又錯誤,則可以:

    rollback;//回滾到最初狀態

  事務可以看做是一個“容器”,將多條語句放入該“容器”,最後只要一個命令行,來決定是否執行該“容器”

  技術分享圖片結果:技術分享圖片

  還錢:技術分享圖片結果:技術分享圖片

事務控制語言DTL