mysql高階(四) 鎖

2021-08-28 04:51:22 字數 1421 閱讀 2239

總結:讀鎖會阻塞寫,但是不會阻塞讀;寫鎖則會把讀和寫都阻塞檢視那些表被加鎖了:show open tables;

結論:myisam的讀寫鎖排程是鎖優先,不適合做寫為主表的引擎;因為寫鎖後,其它執行緒不能進行任何操作,大量的更新回使查詢阻塞。

行鎖

乙個事務開啟,使用索引為條件更新資料會把這一行資料鎖定,其他事物要更新這條資料需等待鎖釋放

表鎖

生產中切記字段型別,一面索引失效導致全表鎖

死鎖

我們再來舉乙個常見的高併發下的死鎖的問題:

有兩個併發更新事務a b,a執行update from account set money =600 where id in (1,2,3);b執行update from account set money =600 where id in (2,3,4)

可以看出這種sql使用了索引,那麼就不會導致表鎖只會鎖定in條件的幾行

那麼問題就來了,事務a執行鎖定完1和3行,準備鎖定2行的時候;不巧這時候b鎖定了2和4行。a事務只能等待b釋放2行的鎖,阻塞;而b這時候如果執行完事務那麼就釋放了鎖,大家皆大歡喜,但是b也要去鎖定3行,這時候3行的鎖被a事務占用,就導致b也阻塞。最終兩個事物都在相互阻塞,產生死鎖。

間隙鎖

對於mysql這種寧可錯殺不放過的對間隙鎖的處理有時候會對系統造成不可預期的危害

如何鎖定一行

這是手動鎖定一行資料的方法

檢視mysql行鎖分析:

MySQL高階 事務和鎖

什麼是事務 一件事就可以事務,事務就是操作過程合集統稱 事務的特性 原子性 一段事務中,要麼全部完成,要麼都不完成 隔離性 兩個客戶同時操作同樣的事務的解決方案,應用及其廣泛,所以針對以上情況出現了事務的隔離級別 讀未提交 read uncommitted 讀提交 read committed 可重...

MySQL(四)事務和鎖

事務是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位,它可以是一條sql語句 預設 一組sql語句 或整個程式,要多條語句乙個事務,需要通過 begin 等價start transaction commit rollback 來控制事務,並且它的開始可以由使用...

MySQL高階開發 表鎖(MyISAM)

標籤 空格分隔 mysql 總結鎖分析 鎖是計算機協調多個程序或者執行緒併發訪問某乙個資源的機制。在資料庫中,除傳統的計算資源 cpu,ram,i o等 的爭用以外,資料也是一種供許多使用者共享的資源,如何保證資料併發訪問的一致性,有效性是所有資料庫必須解決的乙個問題。鎖衝突也是影響資料庫併發訪問效...