事務
就是一組DML語句組成,這些語句在邏輯上存在相關性,這一組DML語句要麼全部成功,要麼全部失敗,是一個整體。MySQL提供一種機制,保證我們達到這樣的效果。事務還規定不同的客戶端看到的數據是不相同的。(《數據庫系統概念》)
是數據庫中的一個單獨的執行單元(Unit),由高級語言編寫用戶程序的執行所引起。當更改數據成功時,在事務中更改的數據就會被commit,不會再改變。否則,事務就會取消或者回滾,更改無效。(Java程序員面試寶典)
我的理解,其實數據庫事務就是數據庫進行讀/寫的操作序列。
作用:1.回滾事務 2.隔離操作
事務的特性
- 原子性:事務不可再分
- 一致性:執行前後,狀態一致
- 隔離性:不被其他正在進行的事務看到修改過程
- 持久性:一旦提交,記錄是永久的
4種隔離級別
-
Read unCommited 讀未提交
-
Read Commited 讀已提交
處理併發下,髒讀的現象;
髒讀:某一端看到了未被提交的事務,導致傳達不正確。
A:1
B:1 (髒數據)
A:1->2 commit -
Repeatable Read 可重複讀
處理併發下,不可重複讀的現象;
不可重複讀:是指在一個事務內,多次讀同一數據。
A:1
B:1
A:1->2 commit
B:2 -
Serializable 可串行化
處理併發下,幻讀的現象;
幻讀:兩端同時操作,導致數據混亂。
A:2 (幻讀)
B:2->1
A:1 (幻讀)