mysql手册英文原版
開頭
這個世界都是并發的,編程里更是這樣,俗話說:并發知識大,一口吃不下。想成為一名優秀的 Java 開發,學好并發,絕對是你走入高薪行列的必備能力之一。
并發涉及的知識點,其實十分瑣碎。學完記不住,記住了用不對。在并發底層原理中,不僅涉及 Java 語言,更涉及 JVM、操作系統、內存、CPU 指令等,令人一頭霧水。
這份筆記+學習腦圖可以幫你系統地學習Java 并發編程知識,并告別碎片化獲取知識的弊端。
鎖種類
Mysql中鎖的分類按照不同類型的劃分可以分成不同的鎖,按照**「鎖的粒度」劃分可以分成:「表鎖、頁鎖、行鎖」;按照「使用的方式」劃分可以分為:「共享鎖」和「排它鎖」;按照思想的劃分:「樂觀鎖」和「悲觀鎖」**。
下面我們對著這幾種劃分的鎖進行詳細的解說和介紹,在了解設計者設計鎖的概念的同時,也能深入的理解設計者的設計思想。
**「表鎖」**是粒度最大的鎖,開銷小,加鎖快,不會出現死鎖,但是由于粒度太大,因此造成鎖的沖突幾率大,并發性能低。
Mysql中**「MyISAM儲存引擎就支持表鎖」,MyISAM的表鎖模式有兩種:「表共享讀鎖」和「表獨占寫鎖」**。
當一個線程獲取到MyISAM表的讀鎖的時候,會阻塞其他用戶對該表的寫操作,但是不會阻塞其它用戶對該用戶的讀操作。
相反的,當一個線程獲取到MyISAM表的寫鎖的時候,就會阻塞其它用戶的讀寫操作對其它的線程具有排它性。
**「頁鎖」**的粒度是介于行鎖和表鎖之間的一種鎖,因為頁鎖是在BDB中支持的一種鎖機制,也很少沒人提及和使用,所以這里制作概述,不做詳解。
**「行鎖」**是粒度最小的鎖機制,行鎖的加鎖開銷性能大,加鎖慢,并且會出現死鎖,但是行鎖的鎖沖突的幾率低,并發性能高。
行鎖是InnoDB默認的支持的鎖機制,MyISAM不支持行鎖,這個也是InnoDB和MyISAM的區別之一。
行鎖在使用的方式上可以劃分為:「共享讀鎖(S鎖)「和」排它寫鎖(X鎖)」。
當一個事務對Mysql中的一條數據行加上了S鎖,當前事務不能修改該行數據只能執行度操作,其他事務只能對該行數據加S鎖不能加X鎖。
若是一個事務對一行數據加了X鎖,該事物能夠對該行數據執行讀和寫操作,其它事務不能對該行數據加任何的鎖,既不能讀也不能寫。
「悲觀鎖和樂觀鎖是在很多框架都存在的一種思想,不要狹義地認為它們是某一種框架的鎖機制」。
數據庫管理系統中為了控制并發,保證在多個事務執行時的數據一致性以及事務的隔離性,使用悲觀鎖和樂觀鎖來解決并發場景下的問題。
Mysql中**「悲觀鎖的實現是基于Mysql自身的鎖機制實現,而樂觀鎖需要程序員自己去實現的鎖機制」,最常見的樂觀鎖實現就鎖機制是「使用版本號實現」**。
樂觀鎖設計思想的在CAS的運用也是比較經典,之前我寫過一篇關于CAS的文章,大家感興趣的可以參考這一篇[]。
從上面的介紹中說了每一種鎖的概念,但是很難說哪一種鎖就是最好的,鎖沒有最好的,只有哪種業務場景最適合哪種鎖,具體業務具體分析。
下面我們就具體基于Mysql的存儲引擎詳細的分析每一種鎖在存儲引擎中的運用和實現。
MyISAM
MyISAM中默認支持的表級鎖有兩種:「共享讀鎖」和「獨占寫鎖」。表級鎖在MyISAM和InnoDB的存儲引擎中都支持,但是InnoDB默認支持的是行鎖。
Mysql中平時讀寫操作都是隱式的進行加鎖和解鎖操作,Mysql已經自動幫我們實現加鎖和解鎖操作了,若是想要測試鎖機制,我們就要顯示的自己控制鎖機制。
Mysql中可以通過以下sql來顯示的在事務中顯式的進行加鎖和解鎖操作
最后
小編精心為大家準備了一手資料
**點擊這里免費領取**以上Java高級架構資料、源碼、筆記、視頻。Dubbo、Redis、設計模式、Netty、zookeeper、Spring cloud、分布式、高并發等架構技術
【附】架構書籍贈送
BATJ面試要點及Java架構師進階資料
436)]
BATJ面試要點及Java架構師進階資料
[外鏈圖片轉存中…(img-XXOjPm4S-1624340602439)]
總結
以上是生活随笔為你收集整理的mysql手册英文原版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018—数学二
- 下一篇: vue3.0(包含中文官方文档)