国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL中Innodb的事務隔離級別和鎖的關系的講解教程

2024-07-24 12:45:21
字體:
來源:轉載
供稿:網友

前言:

我們都知道事務的幾種性質,數據庫為了維護這些性質,尤其是一致性和隔離性,一般使用加鎖這種方式。同時數據庫又是個高并發的應用,同一時間會有大量的并發訪問,如果加鎖過度,會極大的降低并發處理能力。所以對于加鎖的處理,可以說就是數據庫對于事務處理的精髓所在。這里通過分析MySQL中InnoDB引擎的加鎖機制,來拋磚引玉,讓讀者更好的理解,在事務處理中數據庫到底做了什么。

一次封鎖or兩段鎖?
因為有大量的并發訪問,為了預防死鎖,一般應用中推薦使用一次封鎖法,就是在方法的開始階段,已經預先知道會用到哪些數據,然后全部鎖住,在方法運行之后,再全部解鎖。這種方式可以有效的避免循環死鎖,但在數據庫中卻不適用,因為在事務開始階段,數據庫并不知道會用到哪些數據。
數據庫遵循的是兩段鎖協議,將事務分成兩個階段,加鎖階段和解鎖階段(所以叫兩段鎖)

加鎖階段:在該階段可以進行加鎖操作。在對任何數據進行讀操作之前要申請并獲得S鎖(共享鎖,其它事務可以繼續加共享鎖,但不能加排它鎖),在進行寫操作之前要申請并獲得X鎖(排它鎖,其它事務不能再獲得任何鎖)。加鎖不成功,則事務進入等待狀態,直到加鎖成功才繼續執行。
解鎖階段:當事務釋放了一個封鎖以后,事務進入解鎖階段,在該階段只能進行解鎖操作不能再進行加鎖操作。
事務                       加鎖/解鎖處理
begin; 
insert into test ..... 加insert對應的鎖
update test set... 加update對應的鎖
delete from test .... 加delete對應的鎖
commit; 事務提交時,同時釋放insert、update、delete對應的鎖
這種方式雖然無法避免死鎖,但是兩段鎖協議可以保證事務的并發調度是串行化(串行化很重要,尤其是在數據恢復和備份的時候)的。

事務中的加鎖方式
事務的四種隔離級別
在數據庫操作中,為了有效保證并發讀取數據的正確性,提出的事務隔離級別。我們的數據庫鎖,也是為了構建這些隔離級別存在的。

隔離級別 臟讀(Dirty Read) 不可重復讀(NonRepeatable Read) 幻讀(Phantom Read)

未提交讀(Read uncommitted) 可能 可能 可能 已提交讀(Read committed) 不可能 可能 可能 可重復讀(Repeatable read) 不可能 不可能 可能 可串行化(Serializable ) 不可能 不可能 不可能

未提交讀(Read Uncommitted):允許臟讀,也就是可能讀取到其他會話中未提交事務修改的數據

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平舆县| 红原县| 原阳县| 基隆市| 太原市| 石家庄市| 绍兴市| 瓦房店市| 南平市| 神木县| 凉山| 兰西县| 钟祥市| 定州市| 精河县| 隆林| 嘉峪关市| 宁武县| 吉木萨尔县| 榆树市| 永川市| 婺源县| 称多县| 昔阳县| 花垣县| 宜良县| 理塘县| 巴楚县| 集安市| 宁城县| 南和县| 青岛市| 建始县| 普定县| 荔浦县| 合肥市| 始兴县| 富源县| 永登县| 廊坊市| 丽水市|