前言:今天學習鎖的時候講到了事務,有些都忘了,所以寫一篇隨筆來複習一下
事務是由一組sql語句組成的邏輯處理單元。事務具有以下4個特性,簡稱為事務acid屬性。
acid屬性
含義原子性(atomicity)
事務是乙個原子操作單元,其對資料的修改,要麼全部成功,要麼全部失敗。
一致性(consistent)
在事務開始和完成時,資料都必須保持一致狀態。
隔離性(isolation)
資料庫系統提供一定的隔離機制,保證事務在不受外部併發操作影響的 「獨立」 環境下執行。
永續性(durable)
事務完成之後,對於資料的修改是永久的。
併發事務處理帶來的問題
問題含義
丟失更新(lost update)
當兩個或多個事務選擇同一行,最初的事務修改的值,會被後面的事務修改的值覆蓋。
髒讀(dirty reads)
當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。即a事務讀取到了b事務修改但未提交的資料
不可重複讀(non-repeatable reads)
乙個事務在讀取某些資料後的某個時間,再次讀取以前讀過的資料,卻發現和以前讀出的資料不一致。即a事務讀取到了b事務更新的資料
幻讀(phantom reads)
乙個事務按照相同的查詢條件重新讀取以前查詢過的資料,卻發現其他事務插入了滿足其查詢條件的新資料。即a事務讀取到了b事務增加或刪除的資料,彷彿產生了幻覺
不可重複讀和幻讀的重要區別是 不可重複讀為 b事務更新資料,而幻讀是b事務增加一行資料或刪除一行資料。
事務隔離級別
為了解決上述提到的事務併發問題,資料庫提供一定的事務隔離機制來解決這個問題。資料庫的事務隔離越嚴格,併發***越小,但付出的代價也就越大,因為事務隔離實質上就是使用事務在一定程度上「序列化」 進行,這顯然與「併發」 是矛盾的。
資料庫的隔離級別有4個,由低到高依次為read uncommitted、read committed、repeatable read、serializable,這四個級別可以逐個解決髒寫、髒讀、不可重複讀、幻讀這幾類問題。
隔離級別
丟失更新
髒讀不可重複讀
幻讀read uncommitted×√
√√read committed××
√√repeatable read(預設)××
×√serializable××
××備註 : √ 代表可能出現 , × 代表不會出現 。
mysql 的資料庫的預設隔離級別為 repeatable read , 檢視方式:
show variables like 'tx_isolation';
MYSQL之事務篇
在引入事務之前我們先考慮銀行轉賬的操作 從id 1的賬戶給id 2的賬戶轉賬100元 第一步 將id 1的a賬戶餘額減去100 update accounts set balance balance 100where id 1 第二步 將id 2的b賬戶餘額加上100 update accounts...
MySQL之事務詳解
一 用途 二 條件與級別 1.事務基本要素原子性 一致性 隔離性 永續性乙個事務中的所有操作,要麼全部完成,要麼全部不完成 事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像事務從來沒執行過一樣事務開始前和事務完成後,資料庫完整性沒有被破壞 寫入的資料完全符合所有的預設規則資料庫允許多個併發...
mysql 事務中查詢 mysql之事務
我們為什麼要使用資料庫的事務呢?使用事務有什麼缺點呢?使用原因 保持資料的匹配和一致性。缺點 併發操作中過度使用事務影響效能,因為事務用到了鎖技術。我是李福春,今天我們來複習一下事務的特性。你可以收穫下圖中的知識點。下面我們發散一下。事務特性 原子性 要麼全部成功要麼全部失敗 一致性 保證事務的前後...