MySQL事務回顧

事務

一個session中所進行的所有操作,要麼全部成功,要麼全部失敗,作爲單個邏輯工作單位執行的一系列操作,會滿足四大特性:
原子性(Atomicity):事務作爲一個整體被執行 ,要麼全部執行,要麼全部不執行
一致性(Consistency):保證數據庫狀態從一個一致狀態轉變爲另一個一致狀態
隔離性(Isolation):多個事務併發執行時,一個事務的執行不應影響其他事務的執行
持久性(Durability):一個事務一旦提交,對數據庫的修改應該永久保存

事務併發的問題

丟失更新: 一個事務的更新覆蓋了另外一個事務的更新
髒讀:一個事務讀取了另一個事務未提交的數據
不可重複讀:不可重複讀的重點是修改,同樣條件下兩次讀取結果不同,也就是說,被讀取的數據可以被其它事務修改
幻讀:幻讀的重點在於新增或者刪除,同樣條件下兩次讀出來的記錄數不一樣

事務的隔離級別有哪幾種

隔離級別決定了一個session中的事務可能對另一個session中的事務的影響。
ANSI標準定義了4個隔離級別,MySQL的InnoDB都支持
MySQL默認的隔離級別是可重複讀(REPEATABLE READ)
讀未提交(READ UNCOMMITTED):最低級別的隔離,通常又稱爲dirty read,它允許一個事務讀取另一個事務還沒 commit 的數據,這樣可能會提高性能,但是會導致髒讀問題
讀已提交(READ COMMITTED):在一個事務中只允許對其它事務已經 commit 的記錄可見,該隔離級別不能避免不可重複讀問題
可重複讀(REPEATABLE READ):在一個事務開始後,其他事務對數據庫的修改在本事務中不可見,直到本事務 commit 或 rollback。但是,其他事務的 insert/delete 操作對該事務是可見的,也就是說,該隔離級別並不能避免幻讀問題。在一個事務中重複 select 的結果一樣,除非本事務中 update 數據庫
序列化(SERIALIZABLE):最高級別的隔離,只允許事務串行執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章