Mysql事務(wù)與鎖

事務(wù)指的是滿足ACID特性的一組操作,可以通過Commit提交一個事務(wù),也可以使用Rollback進行回滾霉翔。

一、ACID

事務(wù)其實就是并發(fā)控制的基本單位苞笨,數(shù)據(jù)庫事務(wù)的ACID四大特性是事務(wù)的基礎(chǔ)债朵。

  • Atomicity(原子性):事務(wù)被視為不可分割的最小單元,事務(wù)的所有操作要么全部提交成功瀑凝,要么全部失敗回滾序芦。回滾可以用回滾日志來實現(xiàn)粤咪,回滾日志記錄著事務(wù)所執(zhí)行的修改操作谚中,在回滾時反向執(zhí)行這些修改操作即可。
  • Consistency(一致性):數(shù)據(jù)庫在事務(wù)執(zhí)行前后都保持一致性狀態(tài)。在一致性狀態(tài)下宪塔,所有事務(wù)對一個數(shù)據(jù)的讀取結(jié)果都是相同的磁奖。
  • Isolation(隔離性):一個事務(wù)所做的修改在最終提交以前茸塞,對其它事務(wù)是不可見的丰捷。
  • Durability(持久性):一旦事務(wù)提交盘寡,則其所做的修改將會永遠保存到數(shù)據(jù)庫中不跟。即使系統(tǒng)發(fā)生崩潰,事務(wù)執(zhí)行的結(jié)果也不能丟失咒唆。使用重做日志來保證持久性锭环。


    ACID特性之間的關(guān)系

    MySQL 默認采用自動提交模式禾酱。也就是說抄囚,如果不顯式使用START TRANSACTION語句來開始一個事務(wù)霉赡,那么每個查詢都會被當做一個事務(wù)自動提交。

二怠苔、事務(wù)的隔離級別

數(shù)據(jù)庫的一致性和隔離性其實是一個需要開發(fā)者去權(quán)衡的東西同廉,為數(shù)據(jù)庫提供什么樣的隔離性層級就決定了數(shù)據(jù)庫的性能以及可以達到什么樣的一致性。SQL標準中定義了四種數(shù)據(jù)庫的事務(wù)的隔離級別:

事務(wù)隔離級別
  • Read uncommitted (未提交讀):使用查詢語句不會加鎖柑司,可能讀到未提交事務(wù)更新的行(臟讀)。
  • Read committed (已提交讀):會出現(xiàn)不可重復讀锅劝。在一個事務(wù)中兩次查詢結(jié)果可能由于另一個事務(wù)的提交而不同攒驰。
  • Repeatable read (可重復讀):可能出現(xiàn)幻讀」示簦幻讀的結(jié)果其實和不可重復讀是一樣的表現(xiàn)玻粪,差異就在于,不可重復讀诬垂,主要是針對其他事務(wù)進行了編輯(update)和刪除(delete)操作劲室。而幻讀主要是針對插入(insert)操作。也就是在一個事務(wù)生命周期內(nèi)结窘,會查詢到另外一個事務(wù)新插入的數(shù)據(jù)很洋。
  • Serializable (可串行化)

三、鎖

1.鎖的粒度

Mysql提供了兩種封鎖粒度:行級鎖以及表級鎖隧枫。
應(yīng)該盡量只鎖定需要修改的那部分數(shù)據(jù)喉磁,而不是所有的資源。鎖定的數(shù)據(jù)量越少官脓,發(fā)生鎖爭用的可能就越小协怒,系統(tǒng)的并發(fā)程度就越高。

2.鎖類型

(1)讀寫鎖

  • 排它鎖(Exclusive)卑笨,簡寫為 X 鎖孕暇,又稱寫鎖。
  • 共享鎖(Shared),簡寫為 S 鎖妖滔,又稱讀鎖隧哮。

有以下兩個規(guī)定:

  • 一個事務(wù)對數(shù)據(jù)對象 A 加了 X 鎖,就可以對 A 進行讀取和更新铛楣。加鎖期間其它事務(wù)不能對 A 加任何鎖近迁。
  • 一個事務(wù)對數(shù)據(jù)對象 A 加了 S 鎖,可以對 A 進行讀取操作簸州,但是不能進行更新操作鉴竭。加鎖期間其它事務(wù)能對 A 加 S 鎖,但是不能加 X 鎖岸浑。
    (2)意向鎖
    意向鎖在原來的 X/S 鎖之上引入了 IX/IS搏存,IX/IS 都是表鎖,用來表示一個事務(wù)想要在表中的某個數(shù)據(jù)行上加 X 鎖或 S 鎖矢洲。有以下兩個規(guī)定:
  • 一個事務(wù)在獲得某個數(shù)據(jù)行對象的 S 鎖之前璧眠,必須先獲得表的 IS 鎖或者更強的鎖;
  • 一個事務(wù)在獲得某個數(shù)據(jù)行對象的 X 鎖之前读虏,必須先獲得表的 IX 鎖责静。

通過引入意向鎖,事務(wù) T 想要對表 A 加 X 鎖盖桥,只需要先檢測是否有其它事務(wù)對表 A 加了 X/IX/S/IS 鎖灾螃,如果加了就表示有其它事務(wù)正在使用這個表或者表中某一行的鎖,因此事務(wù) T 加 X 鎖失敗揩徊。

各種鎖的兼容關(guān)系如下:


解釋如下:

  • 任意 IS/IX 鎖之間都是兼容的腰鬼,因為它們只是表示想要對表加鎖,而不是真正加鎖塑荒;
  • S 鎖只與 S 鎖和 IS 鎖兼容熄赡,也就是說事務(wù) T 想要對數(shù)據(jù)行加 S 鎖,其它事務(wù)可以已經(jīng)獲得對表或者表中的行的 S 鎖齿税。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彼硫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偎窘,更是在濱河造成了極大的恐慌乌助,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陌知,死亡現(xiàn)場離奇詭異他托,居然都是意外死亡,警方通過查閱死者的電腦和手機仆葡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門赏参,熙熙樓的掌柜王于貴愁眉苦臉地迎上來志笼,“玉大人,你說我怎么就攤上這事把篓∪依#” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵韧掩,是天一觀的道長紊浩。 經(jīng)常有香客問我,道長疗锐,這世上最難降的妖魔是什么坊谁? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮滑臊,結(jié)果婚禮上口芍,老公的妹妹穿的比我還像新娘。我一直安慰自己雇卷,他們只是感情好鬓椭,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著关划,像睡著了一般小染。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮折,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天氧映,我揣著相機與錄音,去河邊找鬼脱货。 笑死,一個胖子當著我的面吹牛律姨,可吹牛的內(nèi)容都是我干的振峻。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼择份,長吁一口氣:“原來是場噩夢啊……” “哼扣孟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荣赶,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤凤价,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拔创,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體利诺,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年剩燥,在試婚紗的時候發(fā)現(xiàn)自己被綠了慢逾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侣滩,靈堂內(nèi)的尸體忽然破棺而出口注,到底是詐尸還是另有隱情,我是刑警寧澤君珠,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布寝志,位于F島的核電站,受9級特大地震影響策添,放射性物質(zhì)發(fā)生泄漏材部。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一舰攒、第九天 我趴在偏房一處隱蔽的房頂上張望败富。 院中可真熱鬧,春花似錦摩窃、人聲如沸兽叮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹦聪。三九已至,卻和暖如春蒂秘,著一層夾襖步出監(jiān)牢的瞬間泽本,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工姻僧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留规丽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓撇贺,卻偏偏與公主長得像赌莺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子松嘶,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350