目 錄
第1章 MySQL的安裝與配置 1
1.1 在Windows平臺(tái)下安裝與配置MySQL 8.0 1
1.1.1 安裝MySQL 8.0 1
1.1.2 配置MySQL 8.0 5
1.2 啟動(dòng)服務(wù)并登錄MySQL數(shù)據(jù)庫(kù) 9
1.2.1 啟動(dòng)MySQL服務(wù) 9
1.2.2 登錄MySQL數(shù)據(jù)庫(kù) 10
1.2.3 配置Path變量 11
1.3 MySQL常用圖形管理工具 13
1.4 在Linux平臺(tái)下安裝與配置MySQL 8.0 14
1.4.1 Linux操作系統(tǒng)下的MySQL版本介紹 14
1.4.2 安裝和配置MySQL的RPM包 15
1.4.3 安裝和配置MySQL的源碼包 18
1.5 專(zhuān)家解惑 19
1.6 經(jīng)典習(xí)題 19
第2章 操作數(shù)據(jù)庫(kù)和數(shù)據(jù)表 20
2.1 創(chuàng)建數(shù)據(jù)庫(kù) 20
2.2 刪除數(shù)據(jù)庫(kù) 22
2.3 創(chuàng)建數(shù)據(jù)表 22
2.3.1 創(chuàng)建表的語(yǔ)法形式 22
2.3.2 使用主鍵約束 24
2.3.3 使用外鍵約束 25
2.3.4 使用非空約束 26
2.3.5 使用性約束 27
2.3.6 使用默認(rèn)約束 27
2.3.7 設(shè)置表的屬性值自動(dòng)增加 28
2.4 查看數(shù)據(jù)表結(jié)構(gòu) 29
2.4.1 查看表基本結(jié)構(gòu)語(yǔ)句DESCRIBE 29
2.4.2 查看表詳細(xì)結(jié)構(gòu)語(yǔ)句SHOW CREATE TABLE 30
2.5 修改數(shù)據(jù)表 31
2.5.1 修改表名 31
2.5.2 修改字段的數(shù)據(jù)類(lèi)型 32
2.5.3 修改字段名 33
2.5.4 添加字段 34
2.5.5 刪除字段 36
2.5.6 修改字段的排列位置 37
2.5.7 更改表的存儲(chǔ)引擎 38
2.5.8 刪除表的外鍵約束 39
2.6 刪除數(shù)據(jù)表 40
2.6.1 刪除沒(méi)有被關(guān)聯(lián)的表 41
2.6.2 刪除被其他表關(guān)聯(lián)的主表 41
2.7 MySQL 8.0的新特性1——默認(rèn)字符集改為utf8mb4 43
2.8 MySQL 8.0的新特性2——自增變量的持久化 44
2.9 綜合案例——數(shù)據(jù)表的基本操作 46
2.10 專(zhuān)家解惑 54
2.11 經(jīng)典習(xí)題 54
第3章 數(shù)據(jù)類(lèi)型和運(yùn)算符 56
3.1 MySQL數(shù)據(jù)類(lèi)型介紹 56
3.1.1 整數(shù)類(lèi)型 56
3.1.2 浮點(diǎn)數(shù)類(lèi)型和定點(diǎn)數(shù)類(lèi)型 58
3.1.3 日期與時(shí)間類(lèi)型 60
3.1.4 文本字符串類(lèi)型 71
3.1.5 二進(jìn)制字符串類(lèi)型 76
3.2 如何選擇數(shù)據(jù)類(lèi)型 79
3.3 常見(jiàn)運(yùn)算符介紹 80
3.3.1 運(yùn)算符概述 80
3.3.2 算術(shù)運(yùn)算符 81
3.3.3 比較運(yùn)算符 82
3.3.4 邏輯運(yùn)算符 90
3.3.5 位運(yùn)算符 92
3.3.6 運(yùn)算符的優(yōu)先級(jí) 95
3.4 綜合案例——運(yùn)算符的使用 96
3.5 專(zhuān)家解惑 98
3.6 經(jīng)典習(xí)題 99
第4章 插入、更新與刪除數(shù)據(jù) 100
4.1 插入數(shù)據(jù) 100
4.1.1 為表的所有字段插入數(shù)據(jù) 100
4.1.2 為表的指定字段插入數(shù)據(jù) 102
4.1.3 同時(shí)插入多條記錄 103
4.1.4 將查詢(xún)結(jié)果插入表中 105
4.2 更新數(shù)據(jù) 107
4.3 刪除數(shù)據(jù) 109
4.4 為表增加計(jì)算列 111
4.5 MySQL 8.0的新特性——DDL的原子化 112
4.6 綜合案例——記錄的插入、更新和刪除 113
4.7 專(zhuān)家解惑 117
4.8 經(jīng)典習(xí)題 118
第5章 索引 119
5.1 索引簡(jiǎn)介 119
5.1.1 索引的含義和特點(diǎn) 119
5.1.2 索引的分類(lèi) 120
5.1.3 索引的設(shè)計(jì)原則 121
5.2 創(chuàng)建索引 121
5.2.1 創(chuàng)建表的時(shí)候創(chuàng)建索引 121
5.2.2 在已經(jīng)存在的表上創(chuàng)建索引 127
5.3 刪除索引 134
5.4 MySQL 8.0的新特性1——支持降序索引 136
5.5 MySQL 8.0的新特性2——統(tǒng)計(jì)直方圖 138
5.5.1 直方圖的優(yōu)點(diǎn) 139
5.5.2 直方圖的基本操作 139
5.6 綜合案例——創(chuàng)建索引 141
5.7 專(zhuān)家解惑 143
5.8 經(jīng)典習(xí)題 143
第6章 視圖 145
6.1 視圖概述 145
6.1.1 視圖的含義 145
6.1.2 視圖的作用 146
6.2 創(chuàng)建視圖 147
6.2.1 創(chuàng)建視圖的語(yǔ)法形式 147
6.2.2 在單表上創(chuàng)建視圖 147
6.2.3 在多表上創(chuàng)建視圖 148
6.3 查看視圖 149
6.3.1 使用DESCRIBE語(yǔ)句查看視圖的基本信息 149
6.3.2 使用SHOW TABLE STATUS語(yǔ)句查看視圖的基本信息 150
6.3.3 使用SHOW CREATE VIEW語(yǔ)句查看視圖的詳細(xì)信息 151
6.3.4 在views表中查看視圖的詳細(xì)信息 152
6.4 修改視圖 153
6.4.1 使用CREATE OR REPLACE VIEW語(yǔ)句修改視圖 153
6.4.2 使用ALTER語(yǔ)句修改視圖 154
6.5 更新視圖 155
6.6 刪除視圖 158
6.7 綜合案例——視圖應(yīng)用 158
6.8 專(zhuān)家解惑 166
6.9 經(jīng)典習(xí)題 167
第7章 查詢(xún)數(shù)據(jù) 168
7.1 基本查詢(xún)語(yǔ)句 168
7.2 單表查詢(xún) 170
7.2.1 查詢(xún)所有字段 171
7.2.2 查詢(xún)指定字段 172
7.2.3 查詢(xún)指定記錄 173
7.2.4 帶IN關(guān)鍵字的查詢(xún) 175
7.2.5 帶BETWEEN AND的范圍查詢(xún) 176
7.2.6 帶LIKE的字符匹配查詢(xún) 178
7.2.7 查詢(xún)空值 179
7.2.8 帶AND的多條件查詢(xún) 181
7.2.9 帶OR的多條件查詢(xún) 182
7.2.10 查詢(xún)結(jié)果不重復(fù) 183
7.2.11 對(duì)查詢(xún)結(jié)果排序 184
7.2.12 分組查詢(xún) 188
7.2.13 使用LIMIT限制查詢(xún)結(jié)果的數(shù)量 193
7.3 使用集合函數(shù)查詢(xún) 194
7.3.1 COUNT()函數(shù) 194
7.3.2 SUM()函數(shù) 195
7.3.3 AVG()函數(shù) 196
7.3.4 MAX()函數(shù) 197
7.3.5 MIN()函數(shù) 198
7.4 連接查詢(xún) 199
7.4.1 內(nèi)連接查詢(xún) 199
7.4.2 外連接查詢(xún) 202
7.4.3 復(fù)合條件連接查詢(xún) 204
7.5 子查詢(xún) 205
7.5.1 帶ANY、SOME關(guān)鍵字的子查詢(xún) 205
7.5.2 帶ALL關(guān)鍵字的子查詢(xún) 206
7.5.3 帶EXISTS關(guān)鍵字的子查詢(xún) 207
7.5.4 帶IN關(guān)鍵字的子查詢(xún) 208
7.5.5 帶比較運(yùn)算符的子查詢(xún) 210
7.6 合并查詢(xún)結(jié)果 211
7.7 為表和字段取別名 214
7.7.1 為表取別名 214
7.7.2 為字段取別名 216
7.8 使用正則表達(dá)式查詢(xún) 217
7.8.1 查詢(xún)以特定字符或字符串開(kāi)頭的記錄 218
7.8.2 查詢(xún)以特定字符或字符串結(jié)尾的記錄 219
7.8.3 用符號(hào)“.”來(lái)替代字符串中的任意一個(gè)字符 219
7.8.4 使用“*”和“ ”匹配多個(gè)字符 220
7.8.5 匹配指定字符串 220
7.8.6 匹配指定字符中的任意一個(gè) 221
7.8.7 匹配指定字符以外的字符 222
7.8.8 使用{n,}或者{n,m}指定字符串連續(xù)出現(xiàn)的次數(shù) 223
7.9 MySQL 8.0的新特性1——GROUP BY不再隱式排序 224
7.10 MySQL 8.0的新特性2——通用表表達(dá)式 226
7.11 綜合案例——數(shù)據(jù)表查詢(xún)操作 230
7.12 專(zhuān)家解惑 237
7.13 經(jīng)典習(xí)題 237
第8章 MySQL函數(shù) 239
8.1 MySQL函數(shù)簡(jiǎn)介 239
8.2 數(shù)學(xué)函數(shù) 240
8.3 字符串函數(shù) 241
8.3.1 計(jì)算字符串字符數(shù)的函數(shù)和計(jì)算字符串長(zhǎng)度的函數(shù) 242
8.3.2 合并字符串函數(shù)CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 242
8.3.3 替換字符串的函數(shù)INSERT(s1,x,len,s2)和字母大小寫(xiě)轉(zhuǎn)換函數(shù) 242
8.3.4 獲取指定長(zhǎng)度的字符串的函數(shù)LEFT(s,n)和RIGHT(s,n) 243
8.3.5 填充字符串的函數(shù)LPAD(s1,len,s2)和RPAD(s1,len,s2) 243
8.3.6 刪除空格的函數(shù)LTRIM(s)和RTRIM(s) 244
8.3.7 刪除指定字符串的函數(shù)TRIM(s1 FROM s) 244
8.3.8 重復(fù)生成字符串的函數(shù)REPEAT(s,n) 244
8.3.9 空格函數(shù)SPACE(n)和替換函數(shù)REPLACE(s,s1,s2) 245
8.3.10 比較字符串大小的函數(shù)STRCMP(s1,s2) 245
8.3.11 獲取子串的函數(shù)SUBSTRING(s,n,len)和MID(s,n,len) 245
8.3.12 匹配子串開(kāi)始位置的函數(shù) 246
8.3.13 字符串逆序的函數(shù)REVERSE(s) 247
8.3.14 返回指定位置的字符串的函數(shù) 247
8.3.15 返回指定字符串位置的函數(shù)FIELD(s,s1,s2,…) 247
8.3.16 返回子串位置的函數(shù)FIND_IN_SET(s1,s2) 248
8.3.17 選取字符串的函數(shù)MAKE_SET(x,s1,s2,…) 248
8.4 日期和時(shí)間函數(shù) 249
8.4.1 獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前時(shí)間的函數(shù) 249
8.4.2 獲取當(dāng)前日期和時(shí)間的函數(shù) 250
8.4.3 UNIX時(shí)間戳函數(shù) 250
8.4.4 返回UTC日期的函數(shù)和返回UTC時(shí)間的函數(shù) 251
8.4.5 獲取月份的函數(shù)MONTH(date)和MONTHNAME(date) 251
8.4.6 獲取星期的函數(shù)DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 252
8.4.7 獲取星期數(shù)的函數(shù)WEEK(d)和WEEKOFYEAR(d) 253
8.4.8 獲取天數(shù)的函數(shù)DAYOFYEAR(d)和DAYOFMONTH(d) 254
8.4.9 獲取年份、季度、小時(shí)、分鐘和秒鐘的函數(shù) 254
8.4.10 獲取日期的指定值的函數(shù)EXTRACT(type FROM date) 255
8.4.11 時(shí)間和秒鐘轉(zhuǎn)換的函數(shù) 255
8.4.12 計(jì)算日期和時(shí)間的函數(shù) 256
8.4.13 將日期和時(shí)間格式化的函數(shù) 259
8.5 條件判斷函數(shù) 262
8.5.1 IF(expr,v1,v2)函數(shù) 262
8.5.2 IFNULL(v1,v2)函數(shù) 262
8.5.3 CASE函數(shù) 263
8.6 系統(tǒng)信息函數(shù) 264
8.6.1 獲取MySQL版本號(hào)、連接數(shù)和數(shù)據(jù)庫(kù)名的函數(shù) 264
8.6.2 獲取用戶(hù)名的函數(shù) 266
8.6.3 獲取字符串的字符集和排序方式的函數(shù) 266
8.6.4 獲取后一個(gè)自動(dòng)生成的ID值的函數(shù) 267
8.7 MySQL 8.0的新特性1——加密函數(shù) 268
8.7.1 加密函數(shù)MD5(str) 269
8.7.2 加密函數(shù)SHA(str) 269
8.7.3 加密函數(shù)SHA2(str, hash_length) 269
8.8 MySQL 8.0的新特性2——窗口函數(shù) 270
8.9 綜合案例——MySQL函數(shù)的使用 271
8.10 專(zhuān)家解惑 274
8.11 經(jīng)典習(xí)題 275
第9章 存儲(chǔ)過(guò)程和函數(shù) 277
9.1 創(chuàng)建存儲(chǔ)過(guò)程和函數(shù) 277
9.1.1 創(chuàng)建存儲(chǔ)過(guò)程 278
9.1.2 創(chuàng)建存儲(chǔ)函數(shù) 280
9.1.3 變量的使用 281
9.1.4 定義條件和處理程序 282
9.1.5 光標(biāo)的使用 285
9.1.6 流程控制的使用 286
9.2 調(diào)用存儲(chǔ)過(guò)程和函數(shù) 291
9.2.1 調(diào)用存儲(chǔ)過(guò)程 291
9.2.2 調(diào)用存儲(chǔ)函數(shù) 292
9.3 查看存儲(chǔ)過(guò)程和函數(shù) 292
9.3.1 使用SHOW STATUS語(yǔ)句查看存儲(chǔ)過(guò)程和函數(shù)的狀態(tài) 293
9.3.2 使用SHOW CREATE語(yǔ)句查看存儲(chǔ)過(guò)程和函數(shù)的定義 293
9.3.3 從information_schema.Routines表中查看存儲(chǔ)過(guò)程和函數(shù)的信息 294
9.4 修改存儲(chǔ)過(guò)程和函數(shù) 295
9.5 刪除存儲(chǔ)過(guò)程和函數(shù) 297
9.6 MySQL 8.0的新特性——全局變量的持久化 298
9.7 綜合案例——創(chuàng)建存儲(chǔ)過(guò)程和函數(shù) 299
9.8 專(zhuān)家解惑 302
9.9 經(jīng)典習(xí)題 302
第10章 MySQL觸發(fā)器 303
10.1 創(chuàng)建觸發(fā)器 303
10.1.1 創(chuàng)建只有一個(gè)執(zhí)行語(yǔ)句的觸發(fā)器 304
10.1.2 創(chuàng)建有多個(gè)執(zhí)行語(yǔ)句的觸發(fā)器 304
10.2 查看觸發(fā)器 307
10.2.1 使用SHOW TRIGGERS語(yǔ)句查看觸發(fā)器信息 307
10.2.2 在triggers表中查看觸發(fā)器信息 309
10.3 觸發(fā)器的使用 310
10.4 刪除觸發(fā)器 311
10.5 綜合案例——觸發(fā)器的使用 312
10.6 專(zhuān)家解惑 314
10.7 經(jīng)典習(xí)題 314
第11章 MySQL權(quán)限與安全管理 315
11.1 權(quán)限表 315
11.1.1 user表 315
11.1.2 db表 318
11.1.3 tables_priv表和columns_priv表 319
11.1.4 procs_priv表 320
11.2 賬戶(hù)管理 320
11.2.1 登錄和退出MySQL服務(wù)器 321
11.2.2 新建普通用戶(hù) 322
11.2.3 刪除普通用戶(hù) 324
11.2.4 root用戶(hù)修改自己的密碼 325
11.2.5 root用戶(hù)修改普通用戶(hù)密碼 326
11.3 權(quán)限管理 327
11.3.1 MySQL的各種權(quán)限 327
11.3.2 授權(quán) 329
11.3.3 收回權(quán)限 331
11.3.4 查看權(quán)限 332
11.4 訪(fǎng)問(wèn)控制 333
11.4.1 連接核實(shí)階段 333
11.4.2 請(qǐng)求核實(shí)階段 333
11.5 提升安全性 334
11.5.1 AES 256加密 334
11.5.2 密碼到期更換策略 336
11.5.3 安全模式安裝 338
11.6 MySQL 8.0的新特性——管理角色 338
11.7 綜合案例——綜合管理用戶(hù)權(quán)限 339
11.8 專(zhuān)家解惑 342
11.9 經(jīng)典習(xí)題 342
第12章 數(shù)據(jù)備份與恢復(fù) 344
12.1 數(shù)據(jù)備份 344
12.1.1 使用MySQLdump命令備份 344
12.1.2 直接復(fù)制整個(gè)數(shù)據(jù)庫(kù)目錄 350
12.1.3 使用MySQLhotcopy工具快速備份 351
12.2 數(shù)據(jù)恢復(fù) 351
12.2.1 使用MySQL命令恢復(fù) 351
12.2.2 直接復(fù)制到數(shù)據(jù)庫(kù)目錄 352
12.2.3 MySQLhotcopy快速恢復(fù) 353
12.3 數(shù)據(jù)庫(kù)遷移 353
12.3.1 相同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移 353
12.3.2 不同版本的MySQL數(shù)據(jù)庫(kù)之間的遷移 354
12.3.3 不同數(shù)據(jù)庫(kù)之間的遷移 354
12.4 表的導(dǎo)出和導(dǎo)入 354
12.4.1 使用SELECTI…NTO OUTFILE導(dǎo)出文本文件 355
12.4.2 使用MySQLdump命令導(dǎo)出文本文件 359
12.4.3 使用MySQL命令導(dǎo)出文本文件 361
12.4.4 使用LOAD DATA INFILE方式導(dǎo)入文本文件 364
12.4.5 使用MySQLimport命令導(dǎo)入文本文件 367
12.5 綜合案例——數(shù)據(jù)的備份與恢復(fù) 368
12.6 專(zhuān)家解惑 372
12.7 經(jīng)典習(xí)題 373
第13章 MySQL日志 374
13.1 日志簡(jiǎn)介 374
13.2 二進(jìn)制日志 375
13.2.1 啟動(dòng)和設(shè)置二進(jìn)制日志 375
13.2.2 查看二進(jìn)制日志 376
13.2.3 刪除二進(jìn)制日志 378
13.2.4 使用二進(jìn)制日志恢復(fù)數(shù)據(jù)庫(kù) 380
13.2.5 暫時(shí)停止二進(jìn)制日志功能 380
13.3 錯(cuò)誤日志 381
13.3.1 啟動(dòng)和設(shè)置錯(cuò)誤日志 381
13.3.2 查看錯(cuò)誤日志 381
13.3.3 刪除錯(cuò)誤日志 382
13.4 通用查詢(xún)?nèi)罩?383
13.4.1 啟動(dòng)通用查詢(xún)?nèi)罩?383
13.4.2 查看通用查詢(xún)?nèi)罩?383
13.4.3 刪除通用查詢(xún)?nèi)罩?384
13.5 慢查詢(xún)?nèi)罩?384
13.5.1 啟動(dòng)和設(shè)置慢查詢(xún)?nèi)罩?385
13.5.2 查看慢查詢(xún)?nèi)罩?385
13.5.3 刪除慢查詢(xún)?nèi)罩?386
13.6 MySQL 8.0的新特性——日志分類(lèi)更詳細(xì) 386
13.7 綜合案例——MySQL日志的綜合管理 386
13.8 專(zhuān)家解惑 392
13.9 經(jīng)典習(xí)題 393
第14章 性能優(yōu)化 394
14.1 優(yōu)化簡(jiǎn)介 394
14.2 優(yōu)化查詢(xún) 395
14.2.1 分析查詢(xún)語(yǔ)句 395
14.2.2 索引對(duì)查詢(xún)速度的影響 398
14.2.3 使用索引查詢(xún) 399
14.2.4 優(yōu)化子查詢(xún) 402
14.3 優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu) 402
14.3.1 將字段很多的表分解成多個(gè)表 403
14.3.2 增加中間表 404
14.3.3 增加冗余字段 405
14.3.4 優(yōu)化插入記錄的速度 406
14.3.5 分析表、檢查表和優(yōu)化表 407
14.4 優(yōu)化MySQL服務(wù)器 409
14.4.1 優(yōu)化服務(wù)器硬件 409
14.4.2 優(yōu)化MySQL的參數(shù) 410
14.5 臨時(shí)表性能優(yōu)化 411
14.6 服務(wù)器語(yǔ)句超時(shí)處理 413
14.7 創(chuàng)建全局通用表空間 414
14.8 MySQL 8.0的新特性1——支持不可見(jiàn)索引 414
14.9 MySQL 8.0的新特性2——增加資源組 416
14.10 綜合案例——全面優(yōu)化MySQL服務(wù)器 418
14.11 專(zhuān)家解惑 420
14.12 經(jīng)典習(xí)題 421
第15章 綜合項(xiàng)目1——論壇管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) 422
15.1 系統(tǒng)概述 422
15.2 系統(tǒng)功能 423
15.3 數(shù)據(jù)庫(kù)設(shè)計(jì)和實(shí)現(xiàn) 424
15.3.1 設(shè)計(jì)方案圖表 424
15.3.2 設(shè)計(jì)表 426
15.3.3 設(shè)計(jì)索引 429
15.3.4 設(shè)計(jì)視圖 430
15.3.5 設(shè)計(jì)觸發(fā)器 431
第16章 綜合項(xiàng)目2——新聞發(fā)布系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) 433
16.1 系統(tǒng)概述 433
16.2 系統(tǒng)功能 434
16.3 數(shù)據(jù)庫(kù)設(shè)計(jì)和實(shí)現(xiàn) 435
16.3.1 設(shè)計(jì)表 435
16.3.2 設(shè)計(jì)索引 439
16.3.3 設(shè)計(jì)視圖 440
16.3.4 設(shè)計(jì)觸發(fā)器 441