完全沒(méi)有必要。工具只是一種輔助,它可以讓我們的工作變得更快捷,但是不要完全依賴工具;我們要把精力放在學(xué)習(xí) MySQL 本身,而不是放在學(xué)習(xí) MySQL 的工具上。
那么學(xué)習(xí) MySQL 需要學(xué)習(xí)哪些知識(shí)呢,我大概整理了一下學(xué)習(xí)的內(nèi)容和路線;因?yàn)槲沂浅绦騿T,所以這個(gè)路線是站在開(kāi)發(fā)人員的角度整理的,如果是專業(yè)的 MySQL DBA,要掌握更多的知識(shí)。
01. 數(shù)據(jù)庫(kù)基本操作和基本的 SQL任何一個(gè)語(yǔ)言、軟件、框架,我們都要先會(huì)使用,所以我們需要先掌握 MySQL 的基本操作和基本的 SQL。
數(shù)據(jù)庫(kù)的基本操作:MySQL 的安裝、創(chuàng)建數(shù)據(jù)庫(kù)、刪除數(shù)據(jù)庫(kù);
表和字段的基本操作:創(chuàng)建表、刪除表、查看表結(jié)構(gòu)、新增修改刪除某一個(gè)字段、設(shè)置主鍵外鍵;這里要注意的一點(diǎn),你不要學(xué)習(xí)通過(guò)工具完成這些操作,而是要會(huì)具體的 SQL 語(yǔ)句;比如 create table ...
熟悉字段的基本類型:數(shù)值類型、日期和時(shí)間類型、字符串類型;最基礎(chǔ)的認(rèn)識(shí),到后面的階段對(duì)這些要有更深的了解。
基本的 SQL 語(yǔ)句:了解 select、insert、update、delete 等基本操作,可以完成單表的增刪查改。
02. SQL 語(yǔ)句數(shù)據(jù)庫(kù)的精髓就是 SQL 語(yǔ)句了,這也是需要我們主要了解的部分,基本的 SQL 語(yǔ)句已經(jīng)在第一階段學(xué)習(xí)了,那么這個(gè)階段我們需要了解哪些呢?
單表查詢:這里就不是指 where column = xxx 這么簡(jiǎn)單的查詢了,我們需要學(xué)習(xí)各種查詢條件,包括大于小于、like、between and 等等,以及排序操作;
聚合函數(shù):比較常用的是 avg, count, max, min, sum 等函數(shù);
數(shù)據(jù)庫(kù)函數(shù):MySQL 自帶了很多函數(shù),一些常見(jiàn)的函數(shù),我們也需要了解,包括數(shù)學(xué)函數(shù)、字符串函數(shù)、日期函數(shù)、條件判斷函數(shù)等等;
復(fù)雜的查詢:包括各種關(guān)聯(lián)查詢(內(nèi)連接、外連接、自連接)、子查詢、分組查詢(group by ... having...)等等;
索引:這里我們要對(duì)索引有一個(gè)基本的認(rèn)識(shí),索引可以讓查詢語(yǔ)句執(zhí)行的更快,我們要知道如何通過(guò) SQL 語(yǔ)句創(chuàng)建索引;
其他的包括:視圖、存儲(chǔ)過(guò)程、事務(wù)等等。
03. SQL 優(yōu)化第二階段的 SQL 學(xué)習(xí),主要是學(xué)習(xí) SQL 怎么用,而到了這個(gè)階段,需要知道如何用更合理。
索引:對(duì)索引有更深入的了解,為什么用了索引查詢就會(huì)變快?索引有哪些分類,常用的 B+ 樹(shù)索引的數(shù)據(jù)結(jié)構(gòu)是什么樣的,索引對(duì)新增、修改、刪除有什么樣影響等等;
SQL 優(yōu)化:寫(xiě)一個(gè) SQL 語(yǔ)句很簡(jiǎn)單,讓這個(gè) SQL 執(zhí)行的更快,就需要下寫(xiě)功夫了;要熟悉常用的 SQL 優(yōu)化技巧,比如哪些錯(cuò)誤的 SQL 寫(xiě)法可能會(huì)導(dǎo)致索引失效,如何查詢和定位慢 SQL 等等;
數(shù)據(jù)類型:對(duì)每一種數(shù)據(jù)類型的大小、范圍、適用場(chǎng)景都有了解,不同的數(shù)據(jù)選擇合適的數(shù)據(jù)類型,比如人的年齡這個(gè)字段,就沒(méi)有必要選擇 INT 類型了;
到了這個(gè)極端,對(duì)于開(kāi)發(fā)人員算是比較合格的了,注意!只是合格,我在工作中見(jiàn)過(guò)不少程序員,只停留在第二階段,他們只管實(shí)現(xiàn)很少關(guān)注效率,這對(duì)于項(xiàng)目來(lái)說(shuō)都是隱藏的危機(jī)。
如果想要更進(jìn)一步,我們要繼續(xù)學(xué)習(xí)的內(nèi)容還有很多,比如 MySQL 的存儲(chǔ)引擎(每種存儲(chǔ)引擎的區(qū)別)、事務(wù)特性、鎖、隔離級(jí)別、部署方式等等,甚至一些和 MySQL 沒(méi)有實(shí)質(zhì)關(guān)聯(lián)的內(nèi)容,比如表結(jié)構(gòu)的設(shè)計(jì)、表的拆分、各種數(shù)據(jù)庫(kù)中間件等等。
要學(xué)的內(nèi)容有這么多,我們沒(méi)有必要把過(guò)多的精力放在工具的學(xué)習(xí)上。
我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。