1. 程式人生 > 其它 >MySQL 事務處理

MySQL 事務處理

事務

  事務是一系列操作,將它們綜合為一個整體,這些操作必須全部完成,如果有一個操作失敗,那麼事務就回滾到最開始的狀態,彷彿什麼都沒發生過一樣。

ACID 原則

  • 原子性: 一組事務,要麼都成功,要麼都失敗。

  • 一致性: 事務前後的資料完整性要保持一致。比如轉賬業務,無論事務執行是否成功,參與轉賬的兩個賬號總額是不變的。

  • 隔離性: 多個併發事務之間要相互隔離,不能被其他事務的操作資料所幹擾。

  • 永續性: 事務一旦提交則不可逆,被持久化到資料庫中。

隔離性導致的問題

  • 髒讀: 指一個事務讀取了另外一個事務未提交的資料。

  • 不可重複讀: 指在一個事務內對同一記錄的兩次讀取不一致,因為另一事務對該記錄做了修改。

  • 虛讀(幻讀): 指在一個事務內對同一張表的兩次查詢不一致,因為另一事務插入了一條新記錄。

MySQL 事務處理

-- MySQL 是預設開啟事務自動提交的
-- 1.手動關閉自動提交
SET autocommit = 0;

-- 2.開啟事務
START TRANSACTION

-- 3.處理事務
處理事務...

-- 4.失敗則回滾(恢復)
ROLLBACK

-- 5.提交事務(持久化)
COMMIT

-- 6.事務結束,開啟自動提交
SET autocommit = 1;

-- 事務中可設定儲存點
SAVEPOINT -- 儲存點
ROLLBACK TO SAVEPOINT -- 回滾到儲存點
RELEASE SAVEPOINT -- 撤銷儲存點

JDBC 事務處理

try{
    conn.setAutoCommit(false);//關閉自動提交的同時預設開啟事務
    處理事務...
    conn.commit();//提交事務      
} catch(Exception e) {
    conn.rollback();//回滾事務(事務失敗預設自動回滾)
}