日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁

發(fā)布時(shí)間:2024/9/5 数据库 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、鎖的分類

  1.1從對數(shù)據(jù)操作的類型來分

    讀鎖(共享鎖):針對同一份數(shù)據(jù),多個(gè)讀操作可以同時(shí)進(jìn)行而不會(huì)互相影響。    

      結(jié)論1:
      --如果某一個(gè)會(huì)話 對A表加了read鎖,則 該會(huì)話 可以對A表進(jìn)行讀操作、不能進(jìn)行寫操作; 且 該會(huì)話不能對其他表進(jìn)行讀、寫操作。
      --即如果給A表加了讀鎖,則當(dāng)前會(huì)話只能對A表進(jìn)行讀操作。

      結(jié)論2:
      會(huì)話0給A表加了鎖;其他會(huì)話的操作:a.可以對其他表(A表以外的表)進(jìn)行讀、寫操作
      b.對A表:讀-可以; 寫-需要等待釋放鎖。、

      某回話給某個(gè)表加了讀鎖,所有的回話都能對該表進(jìn)行讀操作,不能進(jìn)行寫操作,除非該會(huì)話釋放讀鎖。

    寫鎖(排它鎖):當(dāng)前寫操作沒有完成前,它會(huì)阻斷其他寫鎖和讀鎖。    

      當(dāng)前會(huì)話(會(huì)話0) 可以對加了寫鎖的表 進(jìn)行任何操作(增刪改查);但是不能 操作(增刪改查)其他表
      其他會(huì)話:對會(huì)話0中加寫鎖的表 可以進(jìn)行增刪改查的前提是:等待會(huì)話0釋放寫鎖

2.2鎖粒度劃分。

一般分為:行鎖、表鎖、庫鎖

(1)行鎖:訪問數(shù)據(jù)庫的時(shí)候,鎖定整個(gè)行數(shù)據(jù),防止并發(fā)錯(cuò)誤。 如InnoDB存儲(chǔ)引擎使用行鎖

(2)表鎖訪問數(shù)據(jù)庫的時(shí)候,鎖定整個(gè)表數(shù)據(jù),防止并發(fā)錯(cuò)誤。?如MyISAM存儲(chǔ)引擎使用表鎖

行鎖?和?表鎖 的區(qū)別:

  • 表鎖: 開銷小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突概率高,并發(fā)度最低
  • 行鎖: 開銷大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度小,發(fā)生鎖沖突的概率低,并發(fā)度高

2. 3? 補(bǔ)充? ?悲觀鎖 和 樂觀鎖

(1)悲觀鎖:顧名思義,就是很悲觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)block直到它拿到鎖。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

(2)樂觀鎖:?顧名思義,就是很樂觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型,這樣可以提高吞吐量,像數(shù)據(jù)庫如果提供類似于write_condition機(jī)制的其實(shí)都是提供的樂觀鎖。

(3)悲觀鎖 和 樂觀鎖的區(qū)別:

  • 樂觀鎖在不發(fā)生取鎖失敗的情況下開銷比悲觀鎖小,但是一旦發(fā)生失敗回滾開銷則比較大,因此適合用在取鎖失敗概率比較小的場景,可以提升系統(tǒng)并發(fā)性能
  • 樂觀鎖還適用于一些比較特殊的場景,例如在業(yè)務(wù)操作過程中無法和數(shù)據(jù)庫保持連接等悲觀鎖無法適用的地方

小結(jié):

MySQL表級鎖的鎖模式
MyISAM在執(zhí)行查詢語句(SELECT)前,會(huì)自動(dòng)給涉及的所有表加讀鎖,
在執(zhí)行更新操作(DML)前,會(huì)自動(dòng)給涉及的表加寫鎖。
所以對MyISAM表進(jìn)行操作,會(huì)有以下情況:
a、對MyISAM表的讀操作(加讀鎖),不會(huì)阻塞其他進(jìn)程(會(huì)話)對同一表的讀請求,
但會(huì)阻塞對同一表的寫請求。只有當(dāng)讀鎖釋放后,才會(huì)執(zhí)行其它進(jìn)程的寫操作。
b、對MyISAM表的寫操作(加寫鎖),會(huì)阻塞其他進(jìn)程(會(huì)話)對同一表的讀和寫操作,
只有當(dāng)寫鎖釋放后,才會(huì)執(zhí)行其它進(jìn)程的讀寫操作。

?

轉(zhuǎn)載于:https://www.cnblogs.com/xiaowangbangzhu/p/10436848.html

總結(jié)

以上是生活随笔為你收集整理的MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。