2020年-MySQL面試題整理(上)

1.MySQL中事務默認隔離級別是什麼?

  • REPEATABLE READ (可重複讀)

2.MySQL中有哪幾種鎖? 你能列舉死鎖的場景嗎?

鎖類型 開銷 加鎖範圍 是否會出現死鎖 併發性能
表 級 鎖 開銷最小的策略,加鎖速度快 鎖定整張表 不會出現死鎖 併發度最低
行 級 鎖 開銷大,加鎖速度慢 鎖定一行數據 會出現死鎖 併發讀最 高
頁 級 鎖 介於表鎖和行鎖之間 鎖定一頁數據 會出現死鎖 介於表鎖和行鎖之間
死鎖是指兩個或多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源,從而導致惡性循環的 現象。多個事
務同時鎖定同一個資源時,也會產生死鎖。如下:
事 務 1 :              
    	START TRANSACTION;              
		UPDATE account SET balance= balance-1000 WHERE card_id=1;              
		UPDATE account SET balance= balance+1000 WHERE card_id=2;              			
		COMMIT;       
事 務 2 :              
		START TRANSACTION;              
		UPDATE account SET balance= balance-1000 WHERE card_id=2;              
		UPDATE account SET balance= balance+1000 WHERE card_id=1;              
		COMMIT;
    如果剛好兩個事務都執行了第一個條update語句,更新了一行數據,同時也鎖定了該行數據。接着兩 個事務都
    嘗試去執行第二條update語句,發現該行數據已經被對方鎖定,然後兩個事務都等待對方釋放鎖, 同時又持有
    對方需要的鎖,則陷入了死鎖。

3.簡單描述MySQL的MVCC是什麼

  • MVCC是通過在每行記錄後面保存兩個隱藏的列來實現的。這兩個列,一個保存了行的創建時間,一個保存行的過期時間(或刪除時間)。當然存儲的並不是實際的時間值,而是系統版本號(system version number)。每開始一個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作爲事務的版本號,用來和查詢到的每行記錄的版本號進行比較。

4.MySQL中索引有哪幾種類型?

  • Mysql中根據各個索引的特性主要分爲:普通索引、唯一索引、主鍵索引、組合索引、全文索引。

5.你能說說InnoDB和MyISAM存儲引擎的區別嗎?

  • InnoDB
    – 支持事務,支持事務的四種隔離級別。
    – 支持行級鎖,不支持表級鎖。
    – InnoDB支持外鍵。

一 個 InnoDb 引 擎 存 儲 在 一 個 文 件 空 間 ( 共 享 表 空 間 , 表 大 小 不 受 操 作 系 統 控 制 ,
一個表可能分佈在多個文件裏),也有可能爲多個(設置爲獨立表空,表大小受
操 作 系 統 文 件 大 小 限 制 , 一 般 爲 2G) , 受 操 作 系 統 文 件 大 小 的 限 制 ;
主鍵索引採用聚集索引(索引的數據域存儲數據文件本身),輔索引的數據域存
儲主鍵的值;因此從輔索引查找數據,需要先通過輔索引找到主鍵值,再訪問輔
索 引 ; 最 好 使 用 自 增 主 鍵 , 防 止 插 入 數 據 時 , 爲 維 持 B+樹 結 構 , 文 件 的 大 調 整 。

  • MyISAM
    –不支持事務。
    –支持表級鎖,不支持行級鎖。
    –MyISAM引擎不支持外鍵。

一 個 MYISAM 表 有 三 個 文 件 : 索 引 文 件 、 表 結 構 文 件 、 數 據 文 件 ;
採用菲聚集索引,索引文件的數據域存儲指向數據文件的指針。輔索引與主索引
基本一致,但是輔索引不用保證唯一性。

6.MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及之間的區別?

SQL 標 準 定 義 的 四 個 隔 離 級 別 爲 :

  • read uncommited : 讀未提交。多事務場景,允許一個事務讀到另一個事務未提交的數據。
  • read committed: 讀提交。多事務場景,不允許一個事務讀到另一個事務未提交的數據。
  • repeatable read: 可重複讀。一個事務操作時,不允許其他事務修改當前事務操作的數據。
  • serializable : 序列化讀,也加串行讀。事務是串行的。

7.myisamchk 是用來做什麼的?

  • 它主要用於壓縮MyISAM表,減少磁盤或內存的佔用。

MyISAM Static 和 MyISAM Dynamic 有 什 麼 區 別 ?
在 MyISAM Static 上 的 所 有 字 段 有 固 定 寬 度 。 動 態 MyISAM 表 將 具 有 像 TEXT,
BLOB 等 字 段 , 以 適 應 不 同 長 度 的 數 據 類 型 。
MyISAM Static 在 受 損 情 況 下 更 容 易 恢 復 。

8.如何查看指定表上定義了哪些索引?

  • SHOW INDEX FROM 表名;

9. 主鍵字段類型爲bigint ,設置爲 AUTO INCREMENT 時 , 如果達到最大值會發生什麼?

  • 任何進一步的插入都將產生錯誤,因爲密鑰已被使用。

ERROR 1467 (HY000): Failed to read auto-increment value from storage engine mysql>

10. MySQL中的慢查詢日誌作用是什麼?

-mysql的慢查詢日誌是msyql提供的一種日誌記錄,它用來記錄在msyql中響應時間超過閥值的語句,比如具體指運行時間超過long_query_time值的sql,則會被記錄到慢查詢日誌中。

未完… 資料整理自網絡各處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章