天天看點

12.事務控制

1.簡介

事務(Transaction)是指作為一個邏輯工作單元執行的一系列操作,這些操作要麼全部成功,要麼全部失敗。事務確定對多個資料的修改作為一個單元來處理。

例如,張三在ATM機上給李四轉賬100元,在銀行的業務系統中,主要會執行兩步資料變更操作。一是從張三的賬戶減去100元,二是給李四的賬戶增加100元。試問,如果操作1執行成功,操作2執行失敗會發生什麼情況?這時就需要運用事務控制來避免這樣的情況發生。

在MySQL中,隻有使用了Innodb存儲引擎的資料庫或表才支援事務。

事務用于維護資料庫的完整性,保證成批的sql語句要麼都執行,要麼都不執行。

事務用于管理insert、update和delete語句。

2.特性

如果某個資料庫聲稱支援事務,那麼該資料庫必須具備ACID四個特性,即Atomicity(原子性)、 Consistency(一緻性)、Isolation(隔離性)和Durability(持久性)。

  • 原子性:事務必須是原子工作單元,事務中包含的各操作要麼都做,要麼都不做。
  • 一緻性:事務在執行完成時,必須使所有的資料都保持一緻狀态。
  • 隔離性:事務獨立運作,多個事務之間互相隔離,互不幹擾。事務的100%隔離,會犧牲速度。
  • 持久性:事務執行完成之後,它對系統的影響是永久性的。

3.事務控制

在預設情況下,MySQL是自動送出事務的,即每一條insert、update、delete的SQL語句送出後會立即執行commit操作。此外,可以使用start transaction或begin開啟一個事務,或者将autocommit的值設定為0。對于一個事務,要麼復原,要麼送出。

事務送出

如下圖所示,從test使用者賬戶上轉賬100元到admin賬戶上,進行送出操作。

12.事務控制

事務復原