事務是數據庫操作的邏輯單位,滿足 ACID 特性。並發訪問同一數據時,隔離級別決定可見性與一致性權衡。本文覆蓋事務核心概念、三大並發問題、四種隔離級別、MySQL/Hibernate 配置實戰。
| 特性 | 含義 |
|---|---|
| 原子性 | 事務內操作要麼全做,要麼全不做 |
| 一致性 | 事務前後數據庫狀態滿足完整性約束 |
| 隔離性 | 並發事務互不干擾,通過鎖/MVCC 實現 |
| 持久性 | 提交後修改永久生效,不因故障丟失 |



| 級別 | 髒讀 | 不可重複讀 | 幻讀 | 並發性 | 對應整數 |
|---|---|---|---|---|---|
| READ UNCOMMITTED | 可能 | 可能 | 可能 | 最高 | 1 |
| READ COMMITTED | 防止 | 可能 | 可能 | 高 | 2 |
| REPEATABLE READ | 防止 | 防止 | 可能 | 中 | 4 |
| SERIALIZABLE | 防止 | 防止 | 防止 | 最低 | 8 |
-- 查看當前連接隔離級別
SELECT @@tx_isolation;
-- 查看全局隔離級別
SELECT @@global.tx_isolation;
-- 設置當前會話級別
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 設置全局級別
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 手動/自動提交
SET AUTOCOMMIT = 0; -- 手動
SET AUTOCOMMIT = 1; -- 自動
在 hibernate.cfg.xml 中設置:
<property name="hibernate.connection.isolation">4</property> <!-- REPEATABLE READ -->
注意: