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