一、事務概念 事務就是一個程式執行單元,裡面的操作要麼都做,要麼都不做。 二、事務特性 事務有四個非常重要的特性(ACID): 原子性(Atomicity):事務是不可分割的整體,所有操作要麼全做,要麼全不做;只要事務中有一個操作出錯,回滾到事務開始前狀態,即之前已執行的操作無效。 一致性(Cons ...
一、事務概念
事務就是一個程式執行單元,裡面的操作要麼都做,要麼都不做。
二、事務特性
事務有四個非常重要的特性(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,級別越高,性能就越低。