資料庫事務

2022-02-04 22:51:16 字數 1684 閱讀 4714

一、

1、髒讀。a事務修改的資料,還沒有提交,被b事務讀到了,設定隔離級別為read_committed,可以防止這種情況出現

2、不可重複讀。a修改資料之前,b事務讀取資料,a修改提交事務後,b讀取資料,這兩次資料不一樣。(會有什麼影響)

3、幻讀。a事務準備修改搜尋條件下的資料(或者全部),update,然後commit,但是發現仍然有沒有修改的。原因是在這個過程中有b事務插入了一些滿足這個搜尋條件的資料。(a事務進行修改的時候,不准其他資料進行修改)

二、事務隔離五種級別:

transaction_none  不使用事務。

transaction_read_uncommitted  允許髒讀。

transaction_read_committed  防止髒讀,最常用的隔離級別,並且是大多數資料庫的預設隔離級別

transaction_repeatable_read  可以防止髒讀和不可重複讀,

transaction_serializable  可以防止髒讀,不可重複讀取和幻讀,(事務序列化)會降低資料庫的效率

說明:重複讀級別指的是,select的事務要等update事務操作完成才能夠執行,但是insert可以執行,所以會出現幻讀,

不同資料的預設級別不一樣

三、解決

1 髒讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加共享鎖,讀取完釋放事務1讀取資料時加上共享鎖後(這 樣在事務1讀取資料的過程中,其他事務就不會修改該資料),不允許任何事物操作該資料,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更 無權參與進來讀寫,這樣就防止了髒讀問題。

但是當事務1讀取資料過程中,有可能其他事務也讀取了該資料,讀取完畢後共享鎖釋放,此時事務1修改資料,修改 完畢提交事務,其他事務再次讀取資料時候發現資料不一致,就會出現不可重複讀問題,所以這樣不能夠避免不可重複讀問題。

2 不可重複讀:讀取資料時加共享鎖,寫資料時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事物修改該資料,不管資料在事務過程中讀取多少次,資料都是一致的,避免了不可重複讀問題

3 幻讀問題:採用的是範圍鎖ranges ranges_s模式,鎖定檢索範圍為唯讀,這樣就避免了幻影讀問題,在這裡有個描述範圍鎖的文章

相關具體的例子

共享鎖又稱為讀鎖,簡稱s鎖,顧名思義,共享鎖就是多個事務對於同一資料可以共享一把鎖,都能訪問到資料,但是只能讀不能修改。

排他鎖又稱為寫鎖,簡稱x鎖,顧名思義,排他鎖就是不能與其他所並存,如乙個事務獲取了乙個資料行的排他鎖,其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務是可以對資料就行讀取和修改。

對於共享鎖大家可能很好理解,就是多個事務只能讀資料不能改資料,對於排他鎖大家的理解可能就有些差別,我當初就犯了乙個錯誤,以為排他鎖鎖住一行資料後,其他事務就不能讀取和修改該行資料,其實不是這樣的。排他鎖指的是乙個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖。mysql innodb引擎預設的修改資料語句,update,delete,insert都會自動給涉及到的資料加上排他鎖,select語句預設不會加任何鎖型別,如果加排他鎖可以使用select ...for update語句,加共享鎖可以使用select ... lock in share mode語句。所以加過排他鎖的資料行在其他事務種是不能修改資料的,也不能通過for update和lock in share mode鎖的方式查詢資料,但可以直接通過select ...from...查詢資料,因為普通查詢沒有任何鎖機制。

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...

資料庫事務

這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...