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

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=’隔離級別名稱;’

記?。涸O置數據庫的隔離級別一定要是在開啟事務之前!


最新文章

熱門文章

欧美中国韩国日本多水385,国产精品亚亚洲欧关中字幕,αv天堂aⅴ影音先锋手机版,清纯唯美五月丁香俺也去,小说区图片区自拍视频在线,xfplay中文字幕在线资源,俺去啦官网无码免费视频,久久中文字幕乱码久久午夜,日韩AV噜噜噜在线观看