已經有很多教程面面俱到、事無鉅細,但實際上能用到的、消化的內容很少。
希望本文能幫助MySQL初中級使用者,解決問題的同時,提供更好的學習與實踐方法,從原理角度理解爲何要這麼用、爲何MySQL要這樣設計。
本文聚焦於常見的使用場景,給出MySQL用法和基本原理說明。
- 爲便於實踐和消化,同時提供了很多案例和腳本。
- 爲了讀者進一步深入學習、掌握自我升級的方法,提供了一些權威文檔的參考。
如何學習MySQL
善用權威文檔和資料,並動手實踐驗證。因此本文中提到的內容,基本上都有對應的腳本和例子,供大家
- 《MySQL學習方法:官方文檔的使用》:快速、準確掌握MySQL原理的途徑
基本使用與基礎原理
主要介紹MySQL常見的基本使用,但包含了對應的原理分析,因此不同於一般的使用文檔。
DDL及數據類型
除了使用,還解答了下面的一些問題
- 常用的有哪些類型,有什麼區別?
- 類型後的長度有幾種含義?
- 存儲開銷和長度一定有關嗎?
- 自增什麼情況下會重複?
《MySQL數據類型詳解》:
涉及字段長度、取值範圍、存儲開銷等。
包括了5.6/5.7/8.x的主要類型,區分了顯示寬度/有無符號/定點浮點、不同時間類型
下面是部分分解專題:
- 《MySQL中VARCHAR最大長度是多少?CHAR和VARCHAR有哪些區別?》
- 《MySQL顯示寬度與字段長度》
- 《時區是怎麼劃分的?世界各時區的時間如何統一表達?GMT、UTC、UNIX有什麼區別?》
自增、自動更新等類型修飾
- 《MySQL自增列AUTO_INCREMENT詳解》:介紹自增列用法,含NULL值、初始值、指定值等詳細說明
- 《MySQL自動更新列時間戳 ON UPDATE CURRENT_TIMESTAMP》:
ON UPDATE
的生效時機、適用類型、精度與默認值等。
表定義
- 《MySQL分區partition》:介紹了分區的使用,以及爲什麼要做數據庫拆分、爲什麼partition可以提升性能
DML與基礎函數/命令
- 時間處理函數複雜,應該選用哪個? 它們之間有哪些差異和共性?
- NULL作爲特殊值,嚐嚐有出人意料的表現,有什麼規律?
- 《MySQL日期與時間函數》:涉及日期/時間格式化、增減、對比、時區、UTC和UNIX時間
- 《MySQL計算字段長度/大小》:涉及length、bit_length、char_length函數對比
- 《MySQL分頁查詢》:limit用法詳解、適用的性能優化場景
- 《NULL如何參與運算和統計》:涉及到計數求和聚合count/max/sum/group等函數下
NULL
的表現
應用場景
- 性能問題該如何排查、分析、處理?
- 如何順暢使用MySQL客戶端、維護MySQL服務器?
- 複雜的數據分析,有函數該如何用,沒函數該如何自己模擬?
性能分析與監控
- 《MySQL性能分析之show processlist及information_schema.processlist詳解》
- 《MySQL基於information_schema的性能分析樣例》:涉及連接數、數據量、事務和鎖等的監控,慢連接處理
- 《MySQL processlist的state屬性詳解》:常用於慢連接的障礙定位。
- 《MySQL使用Kill命令》:主要用於殺死/清理慢連接
數據分析
- 《MySQL統計數據的時間分佈》
核心爲通過SUBSTRING、DATA_FORMAT、EXTRACT等函數對時間字段進行處理。 - 《MySQL實現排名/分組排名/合計》:介紹了8.0窗口函數rank/dense_rank,也提供了5.6/5.7自行模擬的思路
- 《一對多連表時實現多行過濾》
客戶端與服務器
常見問題及解決方案
經典和常見問題索引,提供解決方案。
- 《MySQL常見誤區》
- 《InnoDB數據損壞如何恢復》:常見於機房斷電後,MySQL啓動失敗的情況
- MySQL ERROR 16 (42000):FUNCTION sum does not exist. Check the ‘Function Name Parsing and Resolution’
- Data truncation: Out of range value for column
- 《MySQL變量使用的常見問題》
以上。感謝你的關注。
待更新:
- 索引結構與設計,執行計劃優化
- 事務、鎖
- 磁盤存儲結構、行模式
- 聚合與排序原理、函數使用