追萬軟件公司-專業從事企業軟件定制系統軟件開發用戶管理系統進銷存系統等軟件開發

mysql事務四大特性介紹

數據庫事務特性:acid

a:原子性,一次操作要么都成功,要么都失敗回滾。(atomicity)

c:一致性,數據執行前和執行后要保持一致。(consistency)[轉賬來說:比如一個賬戶事務執行前和是500,執行后要必須確保和是500]

i:隔離性,并發的多個事務之間相互隔離,互不干擾。(isolation)[事務a要么在事務b執行前執行或者執行后執行]提供好幾種隔離級別

d:永久性,事務執行之后對數據庫的改變是永久性的。(durability)

 

 

臟讀:一個事務讀取了另一個事務未提交的數據。

不可重復讀:一個事務中多次讀取同一個數據得到的結果不一致。(查詢間隔中,其他事務改變數據提交了事務)

不可重復讀和臟讀的區別是,臟讀是某一事務讀取了另一個事務未提交的臟數據,而不可重復讀則是讀取了前一事務提交的數據。

幻讀(虛讀):是事務非獨立執行過程中發生的。

比如事務a修改數據庫中所有數據的name都為張三,事務b這個時候插入了一條新的數據name是李四并且提交了,

事務a的用戶再去查數據發現還有一條(事務b添加的)沒有更新,就像產生幻覺一樣,就是發生了幻讀。

幻讀和不可重復讀都是讀取了另一條已經提交的事務(這點就臟讀不同),所不同的是不可重復讀查詢的都是同一個數據項,而幻讀針對的是一批數據整體(比如數據的個數)。

 

MySQL數據庫為我們提供的四種隔離級別:

① Serializable (串行化):可避免臟讀、不可重復讀、幻讀的發生。

② Repeatable read (可重復讀):可避免臟讀、不可重復讀的發生。

③ Read committed (讀已提交):可避免臟讀的發生。

④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。

 

以上四種隔離級別最高的是Serializable級別,最低的是Read uncommitted級別,當然級別越高,執行效率就越低。

像Serializable這樣的級別,就是以鎖表的方式(類似于Java多線程中的鎖)使得其他的線程只能在鎖外等待,所以平時選用何種隔離級別應該根據實際情況。在MySQL數據庫中默認的隔離級別為Repeatable read (可重復讀)。

 

在MySQL數據庫中查看當前事務的隔離級別:

select @@tx_isolation;

在MySQL數據庫中設置事務的隔離 級別:

set tx_isolation=’隔離級別名稱;’

記住:設置數據庫的隔離級別一定要是在開啟事務之前!


最新文章

熱門文章

乌克兰高大肥美的妇女XXX-8x夜趣导航-李毅吧伊人综合-蝌蚪97视频在线观看