MySQL 基本面試題

目錄

一、SQL的基本操作

1、SQL查詢的執行順序

2、count(*)、count(1) 、count(列名) 的區別

3、char 和 varchar 的區別

4、MySQL 中常用的基礎函數

5、MySQL的執行流程

6、MyISAM和InnoDB的區別

二、事務

1、事務的基本概念

2、事務的四大特性(ACID)

3、事務的四種隔離級別

4、MVCC多版本并發控制協議

三、索引

1、什么是索引

2、索引按功能分類

3、什么是索引覆蓋和回表查詢

4、什么是最左匹配原則

5、MySQL 索引失效的常見場景

四、鎖

1、按鎖粒度分類

2、按鎖模式分類

五、優化

1、針對千萬級數據表的性能優化

六、MySQL 的組復制

1、什么是MySQL Group Replication?它與傳統主從復制有什么區別?

2、Group Replication如何保證數據一致性

3、當Group Replication出現腦裂問題時如何解決?


一、SQL的基本操作

1、SQL查詢的執行順序

from > join > where > group by > having > select > order by > limit

(1)FROM 和 JOIN?- 首先確定數據來源,包括表及其連接方式

(2)WHERE?- 對數據進行初步篩選

(3)GROUP BY?- 按照指定列分組

(4)HAVING?- 對分組后的結果進行篩選

(5)SELECT?- 選擇要返回的列(包括計算列)

(6)DISTINCT?- 去除重復行

(7)ORDER BY?- 對結果排序

(8)LIMIT - 限制返回的行數

2、count(*)、count(1) 、count(列名) 的區別

(1)count(*):統計表中所有行的數量,包括 NULL 值。

(2)count(1):統計表中所有行的數量,與 count(*)?效果相同,MySQL 會優化為相同執行計劃。

(3)count(列名):統計指定列中非 NULL 值的數量。

3、char 和 varchar 的區別

(1)存儲方式:char?固定長度,總是占用定義的長度空間,例如 char(9)只存了3個字節,那么剩余的6個字節插入時會用空格填充到指定長度,查詢時會去除尾部空格。varchar 可變長度,按原樣存儲,不會自動添加或去除空格。

(2)存儲效率:char?適合存儲長度基本固定的數據(如MD5哈希值、國家代碼等)。varchar?適合存儲長度變化大的數據(如用戶名、地址等)。

4、MySQL 中常用的基礎函數

(1)concat(a,b,c):合并字符串?

-- 合并字符串
SELECT name,department, CONCAT(name, '(', department, ')') AS name_dept FROM employees;


(2)SUBSTRING(s, start, length),從字符串 s 的 start 位置截取長度為 length 的子字符串。

--  SUBSTRING 提取字符串
SELECT email, SUBSTRING(email, 1, 5) AS prefix FROM employees WHERE email IS NOT NULL;


(3)replace(原始字符串, 要查找的子串, 替換為的新字符串)

-- 將 name 中的"八"替換為"九"
SELECT name,REPLACE(name, '八', '九') AS new_description
FROM employees;

5、MySQL的執行流程

(1)連接階段:客戶端通過連接器與MySQL服務器建立連接,連接器負責身份驗證(用戶名/密碼驗證),驗證通過后,連接器檢查權限表確定用戶的權限。

(2)查詢緩存階段:服務器查詢緩存,如果找到完全匹配的緩存,直接返回結果。

(3)解析階段:將 SQL 語句分解,檢查 SQL 語句是否正確,生成解析樹。

(4)預處理階段:檢查表和列是否存在,檢查列名是否歧義,檢查用戶是否有權限訪問相關表。

(5)查詢優化階段:優化器會重寫查詢以提高性能,生成執行計劃,選擇最優計劃。

(6)執行階段:通過執行計劃查詢引擎,并調用API接口訪問存儲引擎獲取數據。

(7)返回結果階段:將查詢結果返回客戶端,并存入緩存。

6、MyISAM和InnoDB的區別

特性MyISAMInnoDB
事務支持? 不支持? 支持 ACID 事務
鎖機制表級鎖行級鎖(默認)、支持多版本并發控制 (MVCC)
外鍵支持? 不支持? 支持
崩潰恢復? 較差(可能丟失數據)? 優秀(通過事務日志恢復)
存儲結構3個文件:
.frm(表結構)
.MYD(數據)
.MYI(索引)
1個文件:
.frm(表結構)+表空間文件(數據和索引)
緩存機制只緩存索引(Key Cache)緩存數據和索引(Buffer Pool)
全文索引? 支持(FULLTEXT)? MySQL 5.6+ 支持
COUNT(*) 效率? 極快(存儲行數)? 較慢(需掃描表或索引)
壓縮表? 支持? 不支持
熱備份? 需要鎖表? 支持(通過事務日志)
適用場景讀密集型應用
不需要事務
大量COUNT查詢
寫密集型應用
需要事務
高并發操作
默認引擎MySQL 5.5 之前默認MySQL 5.5+ 默認
數據文件大小限制256TB64TB(理論上可更大)
AUTO_INCREMENT表級計數器內存中的計數器(更高效)
地理空間索引? 支持? MySQL 5.7+ 支持
哈希索引? 不支持? 支持(自適應哈希索引)

二、事務

1、事務的基本概念

事務(Transaction)是數據庫操作的最小工作單元,是作為單個邏輯工作單元執行的一系列操作,這些操作要么全部執行,要么全部不執行。

START TRANSACTION;  -- 或 BEGIN
-- 執行SQL語句
COMMIT;            -- 提交事務
-- 或
ROLLBACK;          -- 回滾事務

2、事務的四大特性(ACID)

(1)原子性

定義:事務是一個不可分割的工作單位,事務中的操作要么全部成功,要么全部失敗回滾。

實現原理:通過 undo log 進行回滾。


(2)一致性

定義:事務執行前后,數據完整性約束沒有被破壞。


(3)隔離性

定義:多個事務并發執行時,一個事務的執行不應影響其他事務的執行。


(4)持久性

定義:事務一旦提交,其結果就是永久性的,即使系統故障也不會丟失。

實現原理:通過redo log(重做日志)實現。

3、事務的四種隔離級別

隔離級別名稱定義

讀未提交(READ UNCOMMITTED)

最低級別,事務可以讀取未提交的數據,可能導致臟讀

讀已提交(READ COMMITTED)

提高了數據一致性,事務只能讀取已提交的數據,但仍可能導致不可重復讀

可重復讀(REPEATABLE READ)

默認級別,確保在同一事務中多次查詢同一數據的結果相同,避免不可重復讀,但可能導致幻讀

串行化(SERIALIZABLE)

最高級別,強制事務串行執行,完全避免臟讀、不可重復讀與幻讀,但相應地降低并發性
問題類型描述各隔離級別能否解決
臟讀(Dirty Read)讀取到其他事務未提交的數據RU允許,RC/RR/SERIALIZABLE解決
不可重復讀同一事務內兩次讀取同一數據結果不同RR/SERIALIZABLE解決
幻讀(Phantom)同一事務內兩次查詢返回不同行數SERIALIZABLE完全解決,RR部分解決

4、MVCC多版本并發控制協議

MVCC(多版本并發控制)是數據庫管理系統中的關鍵技術,它通過數據版本管理顯著提升了并發性能和讀取效率。該技術通過為每個事務創建數據快照,使事務始終看到開始時的數據狀態,從而實現了無沖突的并發讀取。即便其他事務在此期間修改數據,當前事務仍能保持數據視圖的一致性。這種機制完美平衡了數據一致性和系統性能需求,尤其適用于高并發查詢場景,已成為主流數據庫系統的核心特性之一。

三、索引

1、什么是索引

索引是數據庫中用于加速查詢的一種數據結構,它允許快速查找數據而不是對整個表進行掃描。

2、索引按功能分類

(1)普通索引:最基本的索引,無特殊約束

(2)唯一索引:確保索引列的值唯一

(3)主鍵索引:特殊的唯一索引,不允許 NULL 值

(4)復合索引:多個列組合的索引

3、什么是索引覆蓋和回表查詢

  • 索引覆蓋:當索引包含查詢所需的所有字段時,MySQL可以直接從索引中獲取數據,無需訪問數據行。
  • 回表查詢:需要根據索引查找到主鍵后,再通過主鍵查詢完整數據。

4、什么是最左匹配原則

MySQL 在利用復合索引(多列索引)時,會從索引的最左列開始向右匹配,直到遇到范圍查詢(>、<、like、between等)就停止匹配。

5、MySQL 索引失效的常見場景

(1)復合索引未遵循最左匹配原則。

(2)對列使用函數或運算符。

SELECT * FROM users WHERE YEAR(create_time) = 2023;  -- 對列使用函數
SELECT * FROM products WHERE price * 2 > 100;       -- 對列進行運算

(3)隱式類型轉換。

-- user_id 是字符串類型
SELECT * FROM users WHERE user_id = 123;  -- 數字與字符串比較

(4)復合索引不能使用不等于(!=或<>)或 is null(is not null),否則索引失效。

(5)like盡量以常量開頭,不要以%開頭,否則索引失效

(6)盡量不要使用or,否則索引失效。

四、鎖

1、按鎖粒度分類

鎖類型描述存儲引擎支持特點
表鎖鎖定整張表所有引擎支持開銷小、加鎖快,但并發度低
行鎖鎖定表中的單行記錄僅InnoDB支持開銷大、加鎖慢,但并發度高
頁鎖鎖定數據頁(BDB引擎支持)僅BDB支持(已基本淘汰)介于表鎖和行鎖之間

2、按鎖模式分類

鎖模式簡稱描述兼容性
共享鎖(S)S鎖允許其他事務讀但不可寫與共享鎖兼容,與排他鎖互斥
排他鎖(X)X鎖禁止其他事務加任何鎖與其他所有鎖都互斥

五、優化

1、針對千萬級數據表的性能優化

(1)索引優化:建立合適索引,使用復合索引遵循最左前綴原則。

(2)表結構優化:將大字段拆分到單獨表,使用合適的數據類型。

(3)查詢優化:使用EXPLAIN分析執行計劃

-- 傳統分頁(性能差)
SELECT * FROM table LIMIT 1000000, 20;-- 優化分頁(使用索引覆蓋)
SELECT * FROM table 
WHERE id > (SELECT id FROM table ORDER BY id LIMIT 1000000, 1)
LIMIT 20;

(4)架構層優化:讀寫分離、分庫分表、使用Redis緩存熱點數據、非實時操作走消息隊列

六、MySQL 的組復制

1、什么是MySQL Group Replication?它與傳統主從復制有什么區別?

Group Replication是MySQL官方提供的基于Paxos協議的高可用解決方案。

區別:

  • 傳統復制:主從架構,單向復制

  • Group Replication:多主/單主模式,組內節點平等,自動故障轉移



2、Group Replication如何保證數據一致性

(1)基于Paxos協議實現分布式一致性

(2)事務提交需要得到大多數節點認證

(3)使用GTID保證事務全局有序

3、當Group Replication出現腦裂問題時如何解決?

  • 手動干預選擇主分區

  • 使用group_replication_force_members強制重新配置組成員

  • 確保網絡分區恢復后重新同步數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87500.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF學習筆記(12)下拉框控件ComboBox與數據模板

下拉框控件ComboBox與數據模板 一、ComboBox1. ComboBox概述2. ItemsControl類3. Selector類4. ComboBox類 二、ComboBox數據模板總結 一、ComboBox 1. ComboBox概述 ComboBox類代表一個有下拉列表的選擇控件&#xff0c;供用戶選擇。 官方文檔&#xff1a;https://learn.mic…

Docker for Windows 設置國內鏡像源教程

在使用 Docker 時&#xff0c;由于默認的 Docker Hub 鏡像源位于國外&#xff0c;國內用戶在拉取鏡像時可能會遇到速度慢或連接不穩定的問題。為了加速鏡像拉取&#xff0c;可以將 Docker 配置為使用國內鏡像源。以下是適用于 Windows 系統的詳細配置方法&#xff1a; 方法一&…

一鍵部署AI工具!用AIStarter快速安裝ComfyUI與Stable Diffusion

AIStarter部署AI工具&#xff0c;讓AI開發更簡單&#xff01;無需研究復雜環境配置&#xff0c;AIStarter平臺提供一鍵安裝ComfyUI和Stable Diffusion&#xff0c;支持多版本選擇&#xff0c;快速上手。以下是詳細步驟&#xff1a; 一、訪問AIStarter市場 下載AIStarter&#x…

Python基礎(吃洋蔥小游戲)

下面我將為你設計一個"吃洋蔥小游戲"的Python實現方案&#xff0c;使用Pygame庫開發。這個游戲模擬吃洋蔥的過程&#xff0c;玩家需要收集不同種類的洋蔥以獲得高分&#xff0c;同時避免吃到辣椒。 &#x1f9c5; 吃洋蔥小游戲 - Python實現方案 &#x1f3ae; 1. …

Objective-C 路由表原理詳解

在 Objective-C 中實現路由表是組件化架構的核心&#xff0c;它通過 URL 映射機制實現模塊間解耦通信。以下是完整實現原理&#xff1a; 一、核心架構設計 #mermaid-svg-5jMinPiZe8mivAbi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…

通過交互式網頁探索傳輸現象-AI云計算數值分析和代碼驗證

傳輸過程涉及質量、動量和能量等物理量在各種系統中的基本運動和轉移&#xff0c;主要分為動量傳輸、熱量傳輸和質量傳輸&#xff0c;在工程、環境科學、生物學和物流等領域至關重要。 傳輸過程是指物理量&#xff08;如質量、動量和能量&#xff09;在物理、化學、生物或工程系…

使用Rust原生實現小波卡爾曼濾波算法

一、算法原理概述小波變換&#xff08;Wavelet Transform&#xff09;通過多尺度分解將信號分為高頻&#xff08;細節&#xff09;和低頻&#xff08;近似&#xff09;部分&#xff0c;高頻通常包含噪聲&#xff0c;低頻保留主體信息。使用Haar小波&#xff08;計算高效&#x…

leetcode 3304. 找出第 K 個字符 I 簡單

Alice 和 Bob 正在玩一個游戲。最初&#xff0c;Alice 有一個字符串 word "a"。 給定一個正整數 k。 現在 Bob 會要求 Alice 執行以下操作 無限次 : 將 word 中的每個字符 更改 為英文字母表中的 下一個 字符來生成一個新字符串&#xff0c;并將其 追加 到原始的…

數字人分身+矩陣系統聚合+碰一碰發視頻: 源碼搭建-支持OEM

以下是關于數字人分身、矩陣系統聚合及碰一碰發視頻功能的源碼搭建與OEM支持的方案整理&#xff1a;核心技術模塊數字人分身技術 使用深度學習框架&#xff08;如PyTorch或TensorFlow&#xff09;訓練生成對抗網絡&#xff08;GAN&#xff09;或變分自編碼器&#xff08;VAE&am…

【LeetCode 熱題 100】189. 輪轉數組——(解法一)額外數組

Problem: 189. 輪轉數組 題目&#xff1a;給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 文章目錄 整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#xff1a;O(N) 整體思路 這段代碼旨在解決一個經典的…

【PyCharm 2025.1.2配置debug】

大家先看下我的配置 1.調試配置 選擇 FastAPI 框架名稱-》 自定義應用程序文件&#xff1a;必須選擇當前項目的main.pyUvicorn 選項&#xff1a;這是啟動命令&#xff0c;有第三步的選擇 main.py 所以只需要–reload即可&#xff0c;如果想自定義啟動端口補充–port xxxxPytho…

Python數據庫軟件:查詢與預測功能集成系統

Python數據庫軟件:查詢與預測功能集成系統 概述 本文將詳細介紹一個具備查詢和模型預測功能的Python數據庫軟件的設計與實現。該系統基于Python開發,使用Excel作為數據存儲格式,包含約15個功能頁面,支持數據管理、查詢分析、模型預測等核心功能。 系統架構 技術棧 核心…

什么是持續集成/持續交付(CI/CD)?

基本概念 CI/CD旨在通過自動化流程提高代碼質量、加快發布速度 CI &#xff08;Continuous Integration&#xff0c;持續集成&#xff09;CD&#xff08;Continuous Delivery/Deployment&#xff0c;持續交付/持續部署&#xff09; CI 持續集成 目標 頻繁加粗樣式將代碼合…

核彈級漏洞

CVE-2025-6018 漏洞介紹&#xff1a; 該漏洞是Linux PAM&#xff08;可插拔認證模塊&#xff09;中的一個本地權限提升漏洞&#xff0c;主要存在于openSUSE Leap 15和SUSE Linux Enterprise 15的PAM配置中。由于PAM規則錯誤地將檢查條件設置為用戶存在SSH或TTY會話&#xff0c…

LabVIEW自動扶梯振動監測

利用LabVIEW開發平臺構建自動扶梯機械振動數據采集系統&#xff0c;實現驅動主機、減速器、梯級等關鍵部位的振動信號實時采集、頻譜分析、數據存儲及故障特征提取。系統通過加速度傳感器與高速數據采集卡的協同工作&#xff0c;結合 LabVIEW 圖形化編程的高效數據處理能力&…

PTA最少交換次數

最少交換次數 分數 15 作者 計科G隊長 單位 重慶大學 長度為N的數組中只有1&#xff0c;2&#xff0c;3三種值&#xff0c;要按升序排序&#xff0c;并且只能通過數值間的兩兩交換實現不能移位。比如某項競賽的優勝者按金銀銅牌排序&#xff0c;或者荷蘭國旗問題都是該問題…

LiteHub中間件之跨域訪問CORS

跨域訪問CORS 原理基本概念簡單請求非簡單請求&#xff08;預檢請求&#xff09; 代碼實現服務器端Cors的關鍵配置服務端解析預檢請求服務端填充響應 抓包分析 原理 基本概念 在瀏覽器安全模型中&#xff0c;同源策略是最重要的安全基石。 一個“域”是由3個要素組成的&#…

FastAPI開發教程

FastAPI 是一個現代、高性能的 Python Web 框架&#xff0c;專為構建 APIs 設計。它基于 Python 類型提示&#xff0c;支持異步編程&#xff0c;并提供自動生成的交互式文檔&#xff08;Swagger UI 和 ReDoc&#xff09;。以下是 FastAPI 開發的核心指南&#xff1a; 1. 安裝 …

基于Spring Boot + MyBatis-Plus + Thymeleaf的評論管理系統深度解析

你好呀&#xff0c;我是小鄒。 個人博客系統日漸完善&#xff0c;現在的文章評論以及留言數量逐漸增多&#xff0c;所以今天重構了管理后臺的評論列表&#xff08;全量查詢 -> 分頁條件搜索&#xff09;。 示例圖 網頁端手機端一、系統架構設計與技術選型 系統采用前后端分離…

sqlmap學習筆記ing(1.Easy_SQLi(時間,表單注入))

題解 根據題目提示&#xff0c;應為SQL注入&#xff0c;題目頁面只有一個表單&#xff0c;用sqlmap進行表單注入。 使用--forms參數進行自動化表單注入&#xff0c;逐步得到flag。 ### 總結參數作用&#xff1a; -u 指定目標URL。 -C 指定列名&#xff08;多個…