MySQL 事務處理
阿新 • • 發佈:2021-12-10
事務
事務是一系列操作,將它們綜合為一個整體,這些操作必須全部完成,如果有一個操作失敗,那麼事務就回滾到最開始的狀態,彷彿什麼都沒發生過一樣。
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();//回滾事務(事務失敗預設自動回滾)
}