一、事務概念
事務就是一個程序執行單元,裏面的操作要麼都做,要麼都不做。
二、事務特性
事務有四個非常重要的特性(ACID):
原子性(Atomicity):事務是不可分割的整體,所有操作要麼全做,要麼全不做;只要事務中有一個操作出錯,回滾到事務開始前狀態,即之前已執行的操作無效。
一致性(Consistency):事務執行前後,從一個一致性狀態到另一個一致性狀態;比如A向B轉賬(A、B總金額就是一個一致性狀態),不可能出現A扣了錢。B卻沒收到。
隔離性(Isolation):多個併發事務之間相互隔離, 不能相互干擾。
持久性(Durablity):事務完成後,對數據庫的更改是永久保存的,不能回滾。
三、事務併發問題
1、髒讀:一個事務讀取了另一個事務未提交的數據。
2、不可重複讀:一個事務多次讀取同一數據,得到了不同的值。(被另一個事務更新了--update)
3、幻讀:也是多次讀取得到的結果不一致。(被另一個事務增加或刪除了記錄--insert/delete)
四、事務隔離級別(MySQL)
1、讀未提交(read-uncommitted)
2、讀已提交(read-committed):解決髒讀
3、可重複讀(Repeatable read):解決髒讀、不可重複讀
4、串行化(Serializable):解決髒讀、不可重複讀、幻讀
MySQL默認的隔離級別是read-committed,級別越高,性能就越低。