MySQL基礎入門學習教程:mysql資料庫的實現原理

牛仔碼農發表於2021-11-17

資料庫的基本原理

學習資料庫,第一步就是先打好基礎,資料庫原理是計算機科班的一門必修課,非科班的我選擇的是自學,我當時是通過看老杜講的MySQL基礎,配合大學教材《資料庫系統概論》來自學的。

書籍教材這種東西,肯定還是偏理論的一點,相比來說,看線上教程學習mysql更容易理解。資料庫是幹嘛的?

資料庫的功能就是用來組織資料,組織很多很多的資料。

這些資料通常都是儲存在外存(磁碟)資料庫提供的核心功能,也就是針對資料的增刪改查~

學習資料庫我們主要了解的內容主要包含幾個方面:

1、資料庫模型有哪些:包括層次模型、網狀模型和關係模型,我們所用的關係型資料庫就是基於關係模型實現的。

2、關聯式資料庫的基礎和sql:瞭解關聯式資料庫的基本概念,瞭解sql的基本使用方法,至少CRUD和一些常見用法要搞懂。

3、資料庫的安全性和完整性,這兩部分內容其實理論的東西比較枯燥,實際上對應到實際場景中,安全性就是要保護資料的安全,包括許可權控制和資料備份,而完整性則是通過一些約定和規範來限制資料庫的儲存內容,比如我們可以用主鍵、唯一鍵、非空等要求來限制欄位的取值。

4、關係資料理論。這部分內容很有意思,也比較複雜,講到了資料庫的正規化理論,從一正規化到四正規化,各有各的用法和要求,某網際網路公司“第四正規化”就是用這個概念來命名的。

5、事務和鎖,最後一部分內容,就是資料庫的兩個重要組成部分,事務和鎖,事務可以保證一組資料庫操作的ACID特性,非常適用於需要資料一致性的場景,而資料庫的鎖不但是實現事務的基礎,還可以靈活地適用於不同的資料庫應用場景,我們還可以通過sql語句來完成加鎖和釋放,對於併發場景尤其管用。

MySQL的實現原理

學習完了資料庫基礎之後,接下來就該正式學習MySQL了,畢竟很多時候我們的資料庫應用就是MySQL。

其實MySQL裡的很多知識點和我們上面提到的資料庫基礎大同小異,而回到MySQL的實現層,我們就得來看看MySQL的儲存引擎了。

MySQL的儲存引擎分為innodb和myisam,相信大家對於這兩個引擎區別的面試題看了也不少,比如innodb支援事務,支援行級鎖,而myisam不支援。

由於現在innodb基本上是主流,所以我們討論MySQL的時候基本上就是在討論innodb。

對於MySQL的實現原理,我認為大概有這麼一些內容需要我們去學習。

首先,我們瞭解MySQL裡有哪些資料型別,一般的用法如何,然後,嘗試用MySQL去跑一些sql語句,建庫建表,加索引加主鍵,總之,這些實踐能幫助你更好地學習上述內容。

想要更好地瞭解MySQL的原理,我們就必須要了解MySQL的整體架構,一般來說,MySQL從上到下可以分為這麼幾層

客戶端

也就是我們經常用的視覺化工具,比如Navicat for MySQL

服務端

就是我們安裝的MySQL程式,其實開啟它它就是一個MySQL的服務端程式

sql執行層

sql執行層主要負責解析執行sql,裡面包含了很多複雜的組成部分,比如直譯器,分析器,優化器等等,執行層會生成一個sql的執行計劃,這個計劃也經常是我們分析sql效能的一個重要參考內容

儲存引擎層

儲存引擎層是innodb了,比如資料要如組織和存放,索引要如何建立和管理等等,加鎖怎麼加,事務如何實現,都是這一層要考慮的內容。

檔案系統層

儲存引擎的下一層就是檔案系統了,資料庫的資料如何和檔案系統進行互動,就是這一層要做的事情了。

索引

不得不說,索引絕對是資料庫中最經常考察,考點也最多的內容了。

比如給你一條sql,那麼它能否命中索引,能命中哪些索引,如果想要命中某個索引,你應該如何修改,這種問題面試時是不是經常看到,變來變去這麼多題型,其實面試官就是想考察你對於索引的理解。

還有就是,索引的資料結構,一樣是非常熱門的考點之一,索引其實是基於B+樹來實現的,不知道b+樹是啥,請回去看資料結構。

簡單來說,它是一種多路搜尋樹,致力於更短的時間來完成資料檢索,因為它的高度比二叉樹要低,而比起普通的b樹,它的非葉節點只起索引作用,而葉子節點是順序串聯的,所以非常適合做搜尋樹。

如果你理解了這一點,那麼面對此類面試題就可以更加從容一些,面試官其實就是想知道你對b+樹的瞭解到了什麼樣的程度而已。

事務和鎖

除了索引之外,資料庫中最複雜的內容可能就是事務和鎖了。

就拿事務的ACID特性來說,你需要了解每個大寫字母背後的實現原理,比如原子性是如何實現的,一致性是如何保證的,背後的原理是什麼。

我們平時常用的事務可能就是spring裡的事務模板,在事務裡執行的同庫資料庫操作,要麼都成功,要麼都失敗,這就是原子性。

兩個事務之間互不影響,這就是隔離性,當然了,這裡又涉及到了事務隔離級別。

事務隔離級別包括讀未提交,讀已提交,可重複讀和序列化,每個事務隔離級別都適用於某種資料庫讀寫場景,很多時候,我們都需要搞懂隔離級別背後的原理,才能更好地使用它。

MySQL裡預設使用可重複讀的隔離級別,這個級別基本上可以保證我們的事務按照預期執行,在MySQL中,這個事務隔離級別甚至可以解決幻讀的問題。

在MySQL的事務背後,其實有一個隱藏的boss,那就是資料庫的鎖,很多事務的隔離級別都是通過鎖來實現的,比如可重複讀只要加行鎖就可以實現了,而幻讀則需要加上間隙鎖next-key lock來實現。

行級鎖和表級鎖是MySQL中的兩種鎖,表級鎖顧名思義,會直接鎖表,一次只有一個事務能夠訪問,而行級鎖其實鎖的也並非是一行,在MySQL中,這個鎖加在索引上,而這個索引對應的資料往往不止一行,所以這個行級鎖只是理論意義上的"行級鎖"

說了這麼多,要理解MySQL的事務和鎖,還是要多看看相關的書籍和文章,理解其內部的實現原理,知其然也要知其所以然。

MySQL學習教程

這個mysql學習教程是最適合新手學習入門,動力節點的杜老師所講,杜老師講課風格雷厲風行,乾脆利索。

特點:

  • 適合絕對零基礎的學者;

  • 採用循序漸進的方式教學,所以不存在聽不懂,學不會;

  • 看完之後完全可以擔當日常開發工作;

總的來說,視訊是站在絕對零基礎的角度來教,主要內容包括:DQL、DML、DDL、DCL、TCL等SQL語句的學習,尤其對DQL語句進行了詳細的講解,包括單表查詢、多表聯查、內連線、外連線等。另外還講授了資料庫事務的處理,資料庫索引的實現原理,檢視的使用等內容。

通過本mysql教程的學習可以讓一個小白從不會資料庫到能夠在程式設計中熟練使用資料庫。

MySQL學習資料,見評論區!!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007020/viewspace-2842705/,如需轉載,請註明出處,否則將追究法律責任。

相關文章