邀請好友學(xué)習(xí)
每邀請一位你將得 ¥
實戰(zhàn)派 MySQL 高階應(yīng)用指南
¥ 68.00
數(shù)據(jù)庫,是一個程序員的必備技能。而 MySQL 作為時下最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),甚至在可以預(yù)見的未來 MySQL 都將是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。
研發(fā) / 測試 / 前端 / 客戶端… 無論你是哪個崗位,一定不會對 MySQL 陌生,且大概率使用過 INSERT、DELETE、UPDATE、SELECT 等命令來完成對數(shù)據(jù)記錄的增刪改查。
但是,你肯定也聽同學(xué)、同事抱怨過 “MySQL 太復(fù)雜了”“太難了” 之類的話。這通常是在使用 MySQL 的過程中,遇到了錯誤或者是性能問題。如果缺乏有效的學(xué)習(xí),你的 MySQL 技能提升將會遭遇瓶頸,陷入一段時間內(nèi)原地打轉(zhuǎn)的尷尬境地。而且 MySQL 的復(fù)雜性也很容易讓人面臨剛解決一個難題,下一個未知的難題又突然出現(xiàn)的狀況。
為此,本專欄將常見、常用的 MySQL 技巧進行集合,并通過小案例知識點和企業(yè)級應(yīng)用案例實戰(zhàn)的方式,帶領(lǐng)追求進步的你掌握 MySQL 的高級技能,提升職場競爭力。
課程模塊:
本專欄由淺入深,從 MySQL 的基礎(chǔ)知識點開始講起,逐步過渡到進階知識、高級特性與應(yīng)用設(shè)計技巧等等。除了基礎(chǔ)理論之外,專欄中包含有大量的真實操作案例,并在最后設(shè)置了兩個數(shù)據(jù)庫應(yīng)用系統(tǒng)項目實戰(zhàn),達到學(xué)以致用的目的。專欄一共包含 7 個模塊:
第一,MySQL 基礎(chǔ)
主要對 MySQL 的基礎(chǔ)應(yīng)用與基本使用建議進行講解,但并不涉及例如 MySQL 的安裝、基本的增刪改查語法。主要是講解我們平時常見但又常常忽略的功能點,例如:聚合與分組聚合、用戶與權(quán)限、數(shù)據(jù)備份與恢復(fù)等;
第二,MySQL 進階
講解 MySQL 的進階知識點,即我們平時常用,但是難度較高、不易理解的知識點,熟練的掌握這些知識點,能夠在使用上達到事半功倍的效果。內(nèi)容涉及:事務(wù)隔離級別、鎖對并發(fā)的影響、高級查詢、死鎖等等;
第三, MySQL 高級特性
講解常見、常用的 MySQL 高級特性。毫無疑問,MySQL 提供的高級特性主要用于兩個方面,一方面是使用上的優(yōu)化技巧、另一方面是特殊的使用場景。想要高效的使用 MySQL,對于高級特性的掌握也是必備的技能;第四, 應(yīng)用設(shè)計技巧與調(diào)優(yōu)
針對兩個方向進行講解,一是應(yīng)用的方案設(shè)計、二是實際問題的建議與調(diào)優(yōu)。本章的內(nèi)容不僅僅是理論層面的分析,更是結(jié)合了作者多年的工作經(jīng)驗與實際問題的處理辦法;
第五, MySQL 的實現(xiàn)原理
為了做到知其然也知其所以然,這一模塊對實現(xiàn)原理進行講解。首先從高層次理清 MySQL 系統(tǒng)的邏輯架構(gòu)、再去分析 SQL 解析器、查詢優(yōu)化器的實現(xiàn)原理,最后講解 InnoDB 存儲引擎以及事務(wù)的實現(xiàn)原理;
第六, 實踐應(yīng)用
理論結(jié)合實踐是最好的學(xué)習(xí)方式。這一模塊里我會對電商系統(tǒng)、慕課網(wǎng)的數(shù)據(jù)表進行設(shè)計,其中會應(yīng)用到我在課程中所講解的 Schema 設(shè)計規(guī)范、性能優(yōu)化技巧等等知識點;
第七, 總結(jié)與思考
總結(jié)部分將會對本專欄的知識點做出總結(jié),指出重點內(nèi)容;展望部分對專欄以外的知識點做介紹,提供繼續(xù)學(xué)習(xí)方向的指導(dǎo);思考部分則留出開放性思考問題,以便討論交流。
下載慕課網(wǎng)APP
更好的體驗,讓閱讀隨處可得
如無法下載使用圖片另存為
下載海報
騎著豬找未來
問題一:從文中的信息來看,count(n)或count(*)是走索引的,猜測sum()是因為不走索引導(dǎo)致的 問題二:書寫順序為select、from、where、group by、 order by、having
講師回答 / 張勤一
騎豬你好,確實是這樣的,順序是對的
阿斯拉菲
問題1 case when 經(jīng)常統(tǒng)計、縱表轉(zhuǎn)橫表的時候用過,ifnull, if 個人相對用的少 問題2 這個親身體會,mysql 5.x版本默認大小寫不敏感,mysql 8 默認大小寫敏感,修改的話必須是數(shù)據(jù)庫初始化之前修改,之后更改是無效的
講師回答 / 張勤一
是的,這些判斷語句在部分情況下是比較好用的,但是,如果不這樣寫,其實在代碼中判斷,效率也是非常高的,不一定非要這樣用。關(guān)于大小寫敏感的問題,我的個人習(xí)慣是精確查找,而不是依賴于數(shù)據(jù)庫系統(tǒng)的特性。
沁塵
問:將時間轉(zhuǎn)換為時間戳,并使用 int 或者 bigint 類型去存儲,你覺得這樣可行嗎 ? 答:看正文的時候正好奇為啥沒提到存儲int/bigint時間戳,用int/bigint和datetime存儲在不同項目都使用過,感受就是int/bigint計算上很方便。特別是當(dāng)前端項目對于時間展示有不同的格式需求的時候,數(shù)據(jù)庫中存儲的是int/bigint(或者vo層轉(zhuǎn)換)直接返回給前端,前端可以更方便的定制格式而不用先把datetime轉(zhuǎn)成時間戳。但是如果沒這方面的需求,那直接存儲datetime就是最方便的,可以減少轉(zhuǎn)換的次數(shù)。所以個人覺得,從存儲角度上來說,如果沒有格式定制的需求,直接存儲datetime最省事。 問:大多數(shù)時候,我們會選擇將主鍵設(shè)置為 bigint 數(shù)據(jù)類型,你知道這是為什么嗎 ? 答:不知道
講師回答 / 張勤一
沁塵你好: 第一個問題,是否可以考慮將時間存儲為整型?這是完全可以的,正如你所說,時間是整型的話,前端可以方便的進行轉(zhuǎn)換,而且不用考慮精度的問題,且這種轉(zhuǎn)換帶來的性能損耗幾乎是可以忽略不計的。當(dāng)然,如果僅僅是 java 系統(tǒng)之間使用的話,使用 datetime 存儲是最方便的,序列化和反序列化都只需要一個注解就可以完成。 第二個問題,為什么考慮將主鍵設(shè)置為 binint 類型?這里的主要思想就是為了將來的擴展,因為 int 類型的最大表示范圍大約是 20 億,這對于 99% 的項目都基本足夠用了。但是,如果考慮到將來業(yè)務(wù)發(fā)展的比較迅速,就需要使用 bigint 了。如果一開始沒有使用 bigint,而是使用 int,那么,后期的遷移將會是很大的工作量。