熟練使用MySQL數(shù)據(jù)庫(kù),是研發(fā)工程師和數(shù)據(jù)庫(kù)工程師的必備技能之一。本書(shū)從程序員的視角介紹了MySQL數(shù)據(jù)庫(kù)在實(shí)際開(kāi)發(fā)中的核心知識(shí)和應(yīng)用技能。
全書(shū)共14章。第1章主要講解MySQL數(shù)據(jù)庫(kù)以及客戶(hù)端工具的安裝;第2~4章主要介紹數(shù)據(jù)庫(kù)與表的創(chuàng)建、數(shù)據(jù)類(lèi)型與表達(dá)式,以及函數(shù)、運(yùn)算符與變量;第5章主要講解select查詢(xún)語(yǔ)句、子查詢(xún)以及連接查詢(xún);第6章主要講解索引和索引類(lèi)型;第7、8章主要介紹MySQL事務(wù)的ACID特性、事務(wù)的四種隔離級(jí)別、如何使用事務(wù)、存儲(chǔ)過(guò)程和視圖概述,以及如何使用存儲(chǔ)過(guò)程和視圖;第9章介紹MySQL用戶(hù)權(quán)限管理以及數(shù)據(jù)備份與恢復(fù);第10章介紹如何設(shè)計(jì)數(shù)據(jù)庫(kù),包括關(guān)聯(lián)關(guān)系、E-R實(shí)體關(guān)系模型;第11~13章主要介紹MySQL日志、鎖以及分庫(kù)分表;第14章介紹SQL性能優(yōu)化與字符集。附錄部分包含本書(shū)用到的SQL腳本、詞匯解釋以及高頻面試題。
本書(shū)適合所有計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生、軟件開(kāi)發(fā)人員,以及DBA使用,也可作為培訓(xùn)機(jī)構(gòu)MySQL教學(xué)的參考書(shū)。
本書(shū)是一本MySQL實(shí)戰(zhàn)經(jīng)驗(yàn)分享,作者是擁有近十年開(kāi)發(fā)經(jīng)驗(yàn)的后端“老司機(jī)”,向讀者介紹了正確高效使用MySQL的經(jīng)驗(yàn)技巧。書(shū)中首先介紹了MySQL的bi備知識(shí),適合正確學(xué)習(xí)MySQL的新人入手,然后介紹了MySQL在數(shù)據(jù)庫(kù)設(shè)計(jì)、分庫(kù)分表、日志、鎖、性能優(yōu)化等有關(guān)MySQL的高級(jí)技能,有助于讀者了解MySQL在實(shí)際項(xiàng)目開(kāi)發(fā)中的應(yīng)用。本書(shū)集原理、經(jīng)驗(yàn)與實(shí)戰(zhàn)范例于一體,有助于讀者盡快提升MySQL的應(yīng)用水平,此外,書(shū)中還給出了編者在實(shí)際工作中參與面試的一些MySQL高頻面試題,可以幫助有面試需求的讀者通過(guò)本書(shū)獲得經(jīng)驗(yàn)。
MySQL在如今的企業(yè)開(kāi)發(fā)中占據(jù)著十分重要的地位,成為目前世界上流行的開(kāi)源關(guān)系數(shù)據(jù)庫(kù)。一路走來(lái),筆者經(jīng)歷過(guò)的項(xiàng)目無(wú)一例外都是使用MySQL。熟練使用MySQL數(shù)據(jù)庫(kù),是研發(fā)工程師和數(shù)據(jù)庫(kù)工程師的技能之一,MySQL相關(guān)的知識(shí)常常被作為面試題的一部分。本書(shū)總結(jié)了筆者多年使用MySQL的實(shí)踐經(jīng)驗(yàn),可供讀者高效學(xué)習(xí)MySQL并掌握其在開(kāi)發(fā)中的核心知識(shí)點(diǎn)和應(yīng)用技能。
本書(shū)第1~4章主要介紹MySQL基礎(chǔ)的SQL語(yǔ)法知識(shí),包括MySQL數(shù)據(jù)庫(kù)如何安裝、數(shù)據(jù)類(lèi)型和表達(dá)式、運(yùn)算符和變量等內(nèi)容。第5~9章主要介紹select查詢(xún)、索引、事務(wù)、存儲(chǔ)過(guò)程、視圖,以及如何進(jìn)行數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)和用戶(hù)權(quán)限管理。第10~14章講解MySQL高級(jí)特性,包括MySQL日志、鎖、分庫(kù)分表以及SQL性能優(yōu)化和字符集。附錄部分介紹本書(shū)涉及的SQL腳本、詞匯解釋?zhuān)约霸诿嬖囍谐R?jiàn)的高頻問(wèn)題。
本書(shū)結(jié)構(gòu)
本書(shū)涵蓋MySQL的基礎(chǔ)知識(shí)、日常工作中用到的數(shù)據(jù)庫(kù)知識(shí)以及MySQL高級(jí)的特性。全書(shū) 共14章和4個(gè)附錄,各章內(nèi)容概述如下:
?第1章介紹MySQL是什么、macOS和Windows操作系統(tǒng)如何安裝MySQL、MySQL客戶(hù)端(Workbench、DataGrip)的安裝,以及如何通過(guò)命令行工具連接MySQL。
?第2章介紹數(shù)據(jù)庫(kù)操作(創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù),更新數(shù)據(jù)庫(kù)名稱(chēng)、刪除數(shù)據(jù)庫(kù)與表操作(創(chuàng)建表、表數(shù)據(jù)插入、建表規(guī)范、慎重刪除表和數(shù)據(jù)、修改表和表結(jié)構(gòu)以及表結(jié)構(gòu)/表數(shù)據(jù)導(dǎo)出)。
?第3章介紹MySQL常用的數(shù)據(jù)類(lèi)型(數(shù)值數(shù)據(jù)類(lèi)型、日期和時(shí)間類(lèi)型以及字符串?dāng)?shù)據(jù)類(lèi)型)。數(shù)值數(shù)據(jù)類(lèi)型包括整數(shù)類(lèi)型、浮點(diǎn)型類(lèi)型、定點(diǎn)型類(lèi)型、bit類(lèi)型;日期和時(shí)間類(lèi)型包括日期類(lèi)型和時(shí)間類(lèi)型;字符串?dāng)?shù)據(jù)類(lèi)型包括char和varchar類(lèi)型、blob和text類(lèi)型、enum和set類(lèi)型以及JSON類(lèi)型。
?第4章介紹MySQL運(yùn)算符函數(shù)和變量。運(yùn)算符包括運(yùn)算符優(yōu)先級(jí)、比較運(yùn)算符和函數(shù)、邏輯運(yùn)算符、賦值運(yùn)算符。函數(shù)主要包括字符串函數(shù)、數(shù)學(xué)函數(shù)、日期和時(shí)間函數(shù)、聚合函數(shù)、流程控制函數(shù)、強(qiáng)制轉(zhuǎn)換函數(shù)、加密函數(shù)和信息函數(shù)。
?第5章介紹select查詢(xún),主要包括select簡(jiǎn)單查詢(xún)、where條件查詢(xún)、數(shù)據(jù)排序order by、數(shù)據(jù)分組group by、分組后過(guò)濾having、union組合查詢(xún)、子查詢(xún)以及連接查詢(xún)等內(nèi)容。
?第6章介紹索引的相關(guān)內(nèi)容,包括什么是索引;索引的增、刪、改、查,索引類(lèi)型。其中索引類(lèi)型包括主鍵索引、唯一索引、普通索引以及前綴索引等。
?第7章介紹事務(wù)的四大特性(ACID)、如何使用事務(wù)以及事務(wù)的四種隔離級(jí)別,即讀未提交、讀已提交、可重復(fù)讀和串行化。
?第8章主要介紹MySQL的視圖與存儲(chǔ)過(guò)程這兩部分內(nèi)容,其中視圖包括視圖概述,視圖的增、刪、改、查,視圖的應(yīng)用場(chǎng)景和優(yōu)缺點(diǎn);存儲(chǔ)過(guò)程包括存儲(chǔ)過(guò)程的增、刪、改、查,存儲(chǔ)過(guò)程與流程控制語(yǔ)句,存儲(chǔ)過(guò)程的應(yīng)用場(chǎng)景與優(yōu)缺點(diǎn)。
?第9章主要介紹MySQL用戶(hù)管理、角色管理、權(quán)限管理及授權(quán)、數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)等內(nèi)容。
?第10章主要介紹如何設(shè)計(jì)數(shù)據(jù)庫(kù),內(nèi)容包括關(guān)聯(lián)關(guān)系(一對(duì)一、一對(duì)多、多對(duì)多以及自關(guān)聯(lián))、E-R實(shí)體關(guān)系模型、數(shù)據(jù)表設(shè)計(jì)三范式、數(shù)據(jù)庫(kù)設(shè)計(jì)流程以及教務(wù)管理系統(tǒng)案例等。
?第11章主要介紹MySQL數(shù)據(jù)庫(kù)日志,包括錯(cuò)誤日志、普通查詢(xún)?nèi)罩尽⒙樵?xún)?nèi)罩、二進(jìn)制日志、Undo日志、Redo日志以及Relay Log日志,最后介紹主從模式與主從同步等內(nèi)容。
?第12章主要介紹MySQL鎖,包括共享鎖和獨(dú)占鎖、全局鎖、表級(jí)鎖(表鎖、元數(shù)據(jù)鎖、意向鎖、AUTO-INC鎖)、行鎖(記錄鎖、間隙鎖與臨鍵鎖Next-key Lock、插入意向鎖)以及悲觀鎖和樂(lè)觀鎖。
?第13章主要介紹MySQL的分庫(kù)、分表、分組的相關(guān)內(nèi)容。
?第14章主要介紹explain執(zhí)行計(jì)劃、show profile以及慢SQL優(yōu)化(索引失效優(yōu)化、插入性能優(yōu)化)與字符集等內(nèi)容。
?附錄A主要提供書(shū)中使用到的SQL文件。
?附錄B提供詞匯解釋。
?附錄C提供MySQL高頻面試題。
?附錄D提供練習(xí)題。
本書(shū)預(yù)備知識(shí)
操作系統(tǒng)
讀者應(yīng)當(dāng)掌握基本的操作系統(tǒng),比如Windows操作系統(tǒng)或者macOS操作系統(tǒng),能在個(gè)人計(jì)算機(jī)上熟練地安裝和卸載軟件,能運(yùn)行計(jì)算機(jī)的命令行工具。
本書(shū)使用的軟件版本
本書(shū)使用的開(kāi)發(fā)環(huán)境如下:
?操作系統(tǒng)macOS 10.14.3
?操作系統(tǒng)Windows 10
?開(kāi)發(fā)工具DateGrip 2022.3.3
?MySQL Workbench 8.0
讀者對(duì)象
本書(shū)適合所有計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生、軟件開(kāi)發(fā)人員和DBA使用。
源代碼下載
為了方便讀者學(xué)習(xí)本書(shū),本書(shū)還提供了源代碼。掃描下述二維碼即可下載源代碼。
如果讀者在學(xué)習(xí)和下載本書(shū)的過(guò)程中遇到問(wèn)題,可以發(fā)送郵件至booksaga@126.com,郵件主題寫(xiě)“像程序員一樣使用MySQL”。
致謝
本書(shū)能夠順利出版,首先感謝清華大學(xué)出版社的王金柱老師及背后的團(tuán)隊(duì)為本書(shū)的辛勤付出,這是我第八次和王金柱老師合作,每次合作都能讓我感到輕松和快樂(lè),也讓我體會(huì)到寫(xiě)作是一件愉快的事情,我很享受這個(gè)過(guò)程。
感謝我的家人,感謝他們一路的陪伴和督促,感謝他們對(duì)我工作的理解和支持,感謝他們對(duì)我生活無(wú)微不至的照顧,使我沒(méi)有后顧之憂(yōu),全身心投入本書(shū)的寫(xiě)作中。
限于筆者水平和寫(xiě)作時(shí)間,書(shū)中難免存在疏漏之處,歡迎讀者批評(píng)指正。
黃文毅
2023年3月15日
第 1 章 初識(shí)MySQL 1
1.1 安裝MySQL 1
1.1.1 在macOS上安裝MySQL 2
1.1.2 在Windows上安裝MySQL 6
1.2 如何選擇MySQL客戶(hù)端 10
1.2.1 在macOS上安裝Workbench 10
1.2.2 在macOS上安裝DataGrip 12
1.2.3 在Windows上安裝
Workbench 14
1.2.4 命令行連接MySQL 14
第 2 章 數(shù)據(jù)庫(kù)與表的創(chuàng)建 17
2.1 數(shù)據(jù)庫(kù)操作 17
2.1.1 創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù) 18
2.1.2 更新數(shù)據(jù)庫(kù)名稱(chēng) 20
2.1.3 刪除數(shù)據(jù)庫(kù) 21
2.1.4 取個(gè)合適的數(shù)據(jù)庫(kù)名稱(chēng) 22
2.2 表操作 23
2.2.1 創(chuàng)建第一張表 23
2.2.2 表數(shù)據(jù)插入 26
2.2.3 建表規(guī)約 28
2.2.4 慎重刪除表和數(shù)據(jù) 29
2.2.5 修改表和表結(jié)構(gòu) 31
2.2.6 表結(jié)構(gòu)/表數(shù)據(jù)導(dǎo)出 35
第 3 章 MySQL常用數(shù)據(jù)類(lèi)型 38
3.1 數(shù)值數(shù)據(jù)類(lèi)型 38
3.1.1 整數(shù)類(lèi)型 38
3.1.2 浮點(diǎn)數(shù)類(lèi)型 40
3.1.3 定點(diǎn)數(shù)類(lèi)型 42
3.1.4 bit類(lèi)型 43
3.1.5 數(shù)值類(lèi)型屬性 44
3.1.6 超出范圍和溢出處理 44
3.2 日期和時(shí)間類(lèi)型 46
3.2.1 時(shí)間小數(shù)秒精確度 47
3.2.2 日期和時(shí)間類(lèi)型轉(zhuǎn)換 48
3.3 字符串?dāng)?shù)據(jù)類(lèi)型 49
3.3.1 char和varchar類(lèi)型 50
3.3.2 blob和text類(lèi)型 51
3.3.3 enum和set類(lèi)型 52
3.3.4 JSON類(lèi)型 53
3.3.5 數(shù)據(jù)類(lèi)型默認(rèn)值 57
第 4 章 運(yùn)算符、函數(shù)與變量 59
4.1 運(yùn)算符 59
4.1.1 運(yùn)算符優(yōu)先級(jí) 59
4.1.2 比較運(yùn)算符和函數(shù) 60
4.1.3 邏輯運(yùn)算符 62
4.1.4 賦值運(yùn)算符 63
4.2 函數(shù) 65
4.2.1 字符串函數(shù) 65
4.2.2 數(shù)學(xué)函數(shù) 67
4.2.3 日期和時(shí)間函數(shù) 68
4.2.4 聚合函數(shù) 72
4.2.5 流程控制函數(shù) 73
4.2.6 強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù) 74
4.2.7 加密函數(shù) 75
4.2.8 信息函數(shù) 77
4.3 變量 78
第 5 章 select查詢(xún) 80
5.1 select簡(jiǎn)單查詢(xún) 80
5.1.1 無(wú)表查詢(xún) 80
5.1.2 指定列查詢(xún) 81
5.1.3 limit指定行和分頁(yè)查詢(xún) 81
5.2 where條件查詢(xún) 83
5.2.1 使用where子句 83
5.2.2 where單值查詢(xún) 84
5.2.3 范圍和區(qū)間查詢(xún) 85
5.2.4 模糊查詢(xún) 86
5.2.5 空值查詢(xún) 86
5.2.6 where多值查詢(xún) 87
5.3 數(shù)據(jù)排序order by 88
5.4 數(shù)據(jù)分組group by 89
5.5 分組后過(guò)濾having 91
5.6 組合查詢(xún)union 92
5.7 子查詢(xún) 96
5.8 連接查詢(xún) 98
第 6 章 索引 102
6.1 認(rèn)識(shí)索引 102
6.1.1 什么是索引 102
6.1.2 索引的種類(lèi) 104
6.1.3 索引增、刪、改、查 105
6.2 索引類(lèi)型 108
6.2.1 主鍵及主鍵索引 108
6.2.2 唯一索引 109
6.2.3 普通的單字段索引 110
6.2.4 普通的組合索引 110
6.2.5 前綴索引 112
第 7 章 MySQL事務(wù) 114
7.1 事務(wù)的4大特性 114
7.2 使用事務(wù) 116
7.3 事務(wù)的4種隔離級(jí)別 120
第 8 章 MySQL視圖和存儲(chǔ)過(guò)程 127
8.1 視圖 127
8.1.1 視圖的使用場(chǎng)景 127
8.1.2 視圖的增、刪、改、查 128
8.1.3 使用視圖的注意事項(xiàng) 130
8.2 存儲(chǔ)過(guò)程 131
8.2.1 存儲(chǔ)過(guò)程的增、刪、改、查 131
8.2.2 存儲(chǔ)過(guò)程與流程控制語(yǔ)句
搭配使用 134
8.2.3 應(yīng)用場(chǎng)景與優(yōu)缺點(diǎn) 135
第 9 章 用戶(hù)權(quán)限管理及 數(shù)據(jù)備份與恢復(fù) 136
9.1 用戶(hù)權(quán)限管理 136
9.1.1 用戶(hù)管理 136
9.1.2 角色管理 138
9.1.3 權(quán)限管理及授權(quán) 139
9.2 數(shù)據(jù)備份 141
9.2.1 mysqldump概述 141
9.2.2 mysqldump數(shù)據(jù)備份 142
9.3 數(shù)據(jù)恢復(fù) 145
第 10 章 數(shù)據(jù)庫(kù)設(shè)計(jì) 147
10.1 關(guān)聯(lián)關(guān)系 147
10.1.1 一對(duì)一 147
10.1.2 一對(duì)多 149
10.1.3 多對(duì)多 149
10.1.4 自關(guān)聯(lián) 150
10.2 E-R實(shí)體關(guān)系模型 150
10.3 數(shù)據(jù)表設(shè)計(jì)三范式 152
10.4 數(shù)據(jù)庫(kù)設(shè)計(jì)流程 153
10.5 教務(wù)管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)案例 154
10.5.1 需求分析 154
10.5.2 設(shè)計(jì) 155
10.5.3 實(shí)現(xiàn) 159
第 11 章 數(shù)據(jù)庫(kù)日志 161
11.1 MySQL的幾種日志 161
11.2 了解錯(cuò)誤日志 162
11.3 了解普通查詢(xún)?nèi)罩?162
11.4 了解慢查詢(xún)?nèi)罩?164
11.5 了解二進(jìn)制日志 166
11.6 了解撤銷(xiāo)日志 167
11.7 了解重做日志 167
11.8 了解中繼日志 168
11.9 主從模式與主從同步 168
第 12 章 MySQL鎖 172
12.1 MySQL鎖及分類(lèi) 172
12.2 共享鎖和獨(dú)占鎖 172
12.3 全局鎖 174
12.4 表級(jí)鎖 176
12.4.1 表鎖 176
12.4.2 元數(shù)據(jù)鎖 178
12.4.3 意向鎖 180
12.4.4 自增鎖 183
12.5 行鎖 183
12.5.1 記錄鎖 184
12.5.2 間隙鎖與臨鍵鎖 185
12.5.3 插入意向鎖 189
12.6 悲觀鎖和樂(lè)觀鎖 191
第 13 章 MySQL分庫(kù)分表 193
13.1 分庫(kù) 193
13.2 分表 194
13.3 切分方式 194
13.3.1 水平切分的方式 194
13.3.2 垂直切分的方式 196
13.4 分組 196
第 14 章 SQL性能優(yōu)化與字符集 198
14.1 SQL優(yōu)化工具 198
14.1.1 explain執(zhí)行計(jì)劃 198
14.1.2 show profile 200
14.2 慢SQL優(yōu)化 204
14.2.1 表無(wú)任何索引 204
14.2.2 索引失效優(yōu)化 205
14.2.3 使用索引覆蓋優(yōu)化 209
14.2.4 插入性能優(yōu)化 209
14.2.5 優(yōu)化select count(*) 212
14.2.6 select*語(yǔ)句優(yōu)化 213
14.3 字符集 214
14.3.1 字符集概述 214
14.3.2 設(shè)置適當(dāng)?shù)淖址?214
14.3.3 設(shè)置默認(rèn)字符集 215
14.3.4 轉(zhuǎn)換字符集 215
附錄A MySQL數(shù)據(jù) 216
附錄B 詞匯解釋 217
附錄C MySQL高頻面試題 219
附錄D 練習(xí)題 223
參考文獻(xiàn) 226