一、事務概念
事務就是一個程序執行單元,里面的操作要么都做,要么都不做。
二、事務特性
事務有四個非常重要的特性(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,級別越高,性能就越低。
