當前位置 博文首頁 > 信息技術智庫:?『面試知識集錦100篇』3.mysql篇丨mysql基礎知識

    信息技術智庫:?『面試知識集錦100篇』3.mysql篇丨mysql基礎知識

    作者:[db:作者] 時間:2021-09-13 19:04

    作者:不吃西紅柿

    簡介:CSDN博客專家、藍橋簽約作者、大數據&Python領域優質創作者。

    謝謝那些曾經擊倒我的人,

    躺著可真TM舒服。

    目錄

    一、知識體系

    1、關系型數據庫術語

    2、事務的基本要素(ACID)

    3、事務的并發問題

    二、面試真題

    1、說一下 mysql 常用的引擎?

    2、Myisam和InnoDB的區別?

    3、B樹和B+樹的概念和區別?

    4、為什么選擇B+樹作為索引結構?

    5、B+樹的葉子節點都可以存哪些東西?

    6、什么樣的信息能成為索引?

    7、批量往mysql導入1000萬數據有什么方法?

    8、binlog和redolog有什么區別?


    【系列課程介紹】

    『面試知識集錦』系列課程包括以下20+個章節,超過100+篇文章,每篇文章的前半部分為「知識體系」幫助你打牢基礎,后半部分為「面試真題」幫助你拿下面試。

    如果覺得還不錯,求點贊、求收藏、關注專欄。

    圖片


    一、知識體系

    1、關系型數據庫術語

    MySQL 是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于 Oracle 公司。關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。

    開始學習MySQL 數據庫前,讓我們先了解下RDBMS的一些術語:

    • 數據庫:?數據庫是一些關聯表的集合。
    • 數據表:?表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
    • 列:?一列(數據元素) 包含了相同類型的數據, 例如郵政編碼的數據。
    • 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
    • 冗余:存儲兩倍數據,冗余降低了性能,但提高了數據的安全性。
    • 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
    • 外鍵:外鍵用于關聯兩個表。
    • 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引。
    • 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄。
    • 參照完整性:?參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。

    2、事務的基本要素(ACID)

    1、原子性(Atomicity):事務開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是一個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位

    2、一致性(Consistency):事務開始前和結束后,數據庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。

    3、隔離性(Isolation):同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。

    4、持久性(Durability):事務完成后,事務對數據庫的所有更新將被保存到數據庫,不能回滾。

    3、事務的并發問題

    1、臟讀:事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據

    2、不可重復讀:事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果 不一致

    3、幻讀:系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

    小結:不可重復讀的和幻讀很容易混淆,不可重復讀側重于修改,幻讀側重于新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

    二、面試真題

    1、說一下 mysql 常用的引擎?

    InnoDB 引擎MySQL 5.5之后的默認引擎,InnoDB 引擎提供了對數據庫事務的支持,并且還提供了行級鎖和外鍵的約束,它的設計的目標就是處理大數據容量的數據庫系統。MySQL 運行的時候,InnoDB 會在內存中建立緩沖池,用于緩沖數據和索引。由于鎖的粒度小,寫操作是不會鎖定全表的,所以在并發度較高的場景下使用會提升效率的。

    MyISAM 引擎:不提供事務的支持,也不支持行級鎖和外鍵。因此當執行插入和更新語句時,即執行寫操作的時候需要鎖定這個表,所以會導致效率會降低。不過和 InnoDB 不同的是,MyIASM 引擎是保存了表的行數,于是當進行 select count(*) from table 語句時,可以直接的讀取已經保存的值而不需要進行掃描全表。所以,如果表的讀操作遠遠多于寫操作時,并且不需要事務的支持的,可以將 MyIASM 作為數據庫引擎的首選。

    2、MyisamInnoDB的區別?

    對比項

    MyISAM

    InnoDB

    外鍵

    不支持

    支持

    事務

    不支持

    支持

    行表鎖

    表鎖,即使操作一條記錄也會鎖住整個表,不適合高并發的操作

    行鎖,操作時只鎖某一行,不對其它行有影響,

    適合高并發的操作

    緩存

    只緩存索引,不緩存真實數據

    不僅緩存索引還要緩存真實數據,對內存要求較高,而且內存大小對性能有決定性的影響

    • 是否支持行級鎖?: MyISAM 只有表級鎖(table-level locking),而InnoDB 支持行級鎖(row-level locking)和表級鎖,默認為行級鎖,適合高并發操作。
    • 是否支持外鍵 MyISAM不支持,而InnoDB支持
    • 是否支持事務MyISAM不支持,而InnoDB支持
    • 緩存MyISAM只緩存索引,InnoDB緩存索引和真實數據,所以對內存要求高
    • 崩潰恢復MyISAM 崩潰后發生損壞的概率比 InnoDB 高很多,而且恢復的速度也更慢。

    3、B樹和B+樹的概念和區別?

    1B-樹的關鍵字和記錄是放在一起的,葉子節點可以看作外部節點,不包含任何信息;B+樹的非葉子節點中只有關鍵字和指向下一個節點的索引,記錄只放在葉子節點中。

    2)在B-樹中,越靠近根節點的記錄查找時間越快,只要找到關鍵字即可確定記錄的存在;而B+樹中每個記錄的查找時間基本是一樣的,都需要從根節點走到葉子節點,而且在葉子節點中還要再比較關鍵字。從這個角度看B-樹的性能好像要比B+樹好,而在實際應用中卻是B+樹的性能要好些。

    4、為什么選擇B+樹作為索引結構?

    • 因為B+樹的非葉子節點不存放實際的數據,這樣每個節點可容納的元素個數比B-樹多,樹高比B-樹小,這樣帶來的好處是減少磁盤訪問次數。盡管B+樹找到一個記錄所需的比較次數要比B-樹多,但是一次磁盤訪問的時間相當于成百上千次內存比較的時間,因此實際中B+樹的性能可能還會好些。
    • B+樹的葉子節點使用指針連接在一起,方便順序遍歷(例如查看一個目錄下的所有文件,一個表中的所有記錄等)。
    • B+樹的查詢效率更加穩定,每次查詢的效率一樣。

    Hash索引底層是哈希表,哈希表是一種以key-value存儲數據的結構,所以多個數據在存儲關系上是完全沒有任何順序關系的,所以,對于區間查詢是無法直接通過索引查詢的,就需要全表掃描。所以,哈希索引只適用于等值查詢的場景。而B+ 樹是一種多路平衡查詢樹,所以他的節點是天然有序的(左子節點小于父節點、父節點小于右子節點),所以對于范圍查詢的時候不需要做全表掃描

    • 二叉查找樹:解決了排序的基本問題,但是由于無法保證平衡,可能退化為鏈表。
    • 平衡二叉樹:通過旋轉解決了平衡的問題,但是旋轉操作效率太低。
    • 紅黑樹:通過舍棄嚴格的平衡和引入紅黑節點,解決了 AVL旋轉效率過低的問題,但是在磁盤等場景下,樹仍然太高,IO次數太多。

    5、B+樹的葉子節點都可以存哪些東西?

    可能存儲的是整行數據,也有可能是主鍵的值

    6、什么樣的信息能成為索引?

    主鍵,唯一鍵,普通鍵都可,只要能讓數據有一定區分性的字段。

    7、批量往mysql導入1000萬數據有什么方法?

    • 減少IO次數
    • SQL寫法優化,一條SQL語句插入多條數據
    • 合理設置批量大小
    • 盡量順序插入, 減少索引的維護壓力

    8、binlogredolog有什么區別?

    1. redolog是在InnoDB存儲引擎層產生,而binlogMySQL數據庫的上層服務層產生的。
    2. 兩種日志記錄的內容形式不同。MySQLbinlog是邏輯日志,其記錄是對應的SQL語句。而innodb存儲引擎層面的重做日志是物理日志。
    3. 兩種日志與記錄寫入磁盤的時間點不同,binlog日志只在事務提交完成后進行一次寫入。而innodb存儲引擎的重做日志在事務進行中不斷地被寫入,并日志不是隨事務提交的順序進行寫入的。
    4. binlog不是循環使用,在寫滿或者重啟之后,會生成新的binlog文件,redolog是循環使用。
    5. binlog可以作為恢復數據使用,主從復制搭建,redolog作為異常宕機或者介質故障后的數據恢復使用。

    好了,本節分享就到這里......點贊、收藏、關注專欄之后,回去等通知吧!

    cs
hallobike的博客:圖像分類中的深度學習網絡匯總 hallobike的博客:一文看懂網絡中間層特征矩陣和卷積層參數 hallobike的博客:python移動文件到新的文件夾并重命名 hallobike的博客:解決OpenCV讀取視頻結束后報錯的問題 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 lyndon:CPU 上下文切換 lyndon:printf()、printk()、消息級別、日志級別 lyndon:gcc 添加 -MD 選項依然不依賴 .h 問題解決 qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<11>繪制 大番薯:編程術語英漢對照 HashFlag的博客:Python基礎 風信子的貓Redamancy的快樂星球:PRML - Chapter 02 Probability g5703129的博客:java學習筆記總結,持續更新中 晴天的專欄:怎樣規劃你畢業以后的人生 程序員cxuan的個人主頁:這篇 Java 基礎,我吹不動了 小小張自由―>張有博:軟件工程――編碼、測試、維護 小小張自由―>張有博:淺談面向對象方法學 小小張自由―>張有博:UML――概述(事物、關系、圖) 小小張自由―>張有博:UML――用例圖 小小張自由―>張有博:UML――活動圖和狀態圖 小小張自由―>張有博:UML――交互圖(順序圖與協作圖) 小小張自由―>張有博:UML――實現圖(構件圖與部署圖) 小小張自由―>張有博:C#編程基礎――C#與.NET的關系 小小張自由―>張有博:C#編程基礎――數據類型 小小張自由―>張有博:C#編程基礎――常量與變量 小小張自由―>張有博:C#編程基礎――運算符與表達式 小小張自由―>張有博:C#編程基礎――循環語句 小小張自由―>張有博:C#編程基礎――跳轉語句 小小張自由―>張有博:C#編程基礎――類 小小張自由―>張有博:C#編程基礎――方法 小小張自由―>張有博:初始三層架構(超超超詳細) 小小張自由―>張有博:C#連接數據庫之Connection、Command、D 小小張自由―>張有博:System.ArgumentOutOfRangeException: 小小張自由―>張有博:機房重構之單例模式的應用 小小張自由―>張有博:機房重構之備忘錄模式的應用 小小張自由―>張有博:機房重構之職責鏈模式的應用 小小張自由―>張有博:HTML基礎――標簽 小小張自由―>張有博:div+css的入門知識 小小張自由―>張有博:CSS核心內容:標準流、盒子模型、浮動 小小張自由―>張有博:asp.net生成驗證碼并提交驗證 小小張自由―>張有博:XML基礎 小小張自由―>張有博:各種計算機語言簡短簡介 小小張自由―>張有博:2020年10月自考總結 小小張自由―>張有博:vs2019利用gitee(碼云)協作開發 小小張自由―>張有博:1024程序員節 小小張自由―>張有博:IDEA2020.3詳細安裝教程 小小張自由―>張有博:JavaWeb之Request與Response詳解 小小張自由―>張有博:JavaWeb之Filter和Listener 小小張自由―>張有博:Vue插件報錯:Vue.js is detected on t .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解 Python調用百度AI實現圖片上表格識別功能 node自定義安裝更改npm全局模塊默認安裝路徑的步驟 帶你用C語言實現strtok和字符串分割函數 靜態網頁和靜態網頁性能比較 網頁標題優化原則和描述優化原則 php 怎么設置cookie記住密碼 php設置時區無效怎么辦 php __autoload 失效怎么辦 有關PHP調試的小技巧,看看吧! 從0開始:教你微信小店怎么開! 成本5元竟然賣50元 微信朋友圈賣面膜真黑啊 HashMap原理及put方法與get方法的調用過程 基于IDEA 的遠程調試 Weblogic的操作過程 UTC時間、GMT時間、本地時間、Unix時間戳的具體使用 如何利用SwiftUI實現可縮放的圖片預覽器 網站怎么利用內容更新雙重境界快速提高網站權重? php顯示繁體亂碼怎么辦 php不能開啟php_curl怎么辦
A级免费视频