目 錄
第1章 MySQL的安裝與配置 1
1.1 在Windows平臺下安裝與配置MySQL 8.0 1
1.1.1 安裝MySQL 8.0 1
1.1.2 配置MySQL 8.0 5
1.2 啟動服務(wù)并登錄MySQL數(shù)據(jù)庫 9
1.2.1 啟動MySQL服務(wù) 9
1.2.2 登錄MySQL數(shù)據(jù)庫 10
1.2.3 配置Path變量 11
1.3 MySQL常用圖形管理工具 13
1.4 在Linux平臺下安裝與配置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 專家解惑 19
1.6 經(jīng)典習(xí)題 19
第2章 操作數(shù)據(jù)庫和數(shù)據(jù)表 20
2.1 創(chuàng)建數(shù)據(jù)庫 20
2.2 刪除數(shù)據(jù)庫 22
2.3 創(chuàng)建數(shù)據(jù)表 22
2.3.1 創(chuàng)建表的語法形式 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è)置表的屬性值自動增加 28
2.4 查看數(shù)據(jù)表結(jié)構(gòu) 29
2.4.1 查看表基本結(jié)構(gòu)語句DESCRIBE 29
2.4.2 查看表詳細(xì)結(jié)構(gòu)語句SHOW CREATE TABLE 30
2.5 修改數(shù)據(jù)表 31
2.5.1 修改表名 31
2.5.2 修改字段的數(shù)據(jù)類型 32
2.5.3 修改字段名 33
2.5.4 添加字段 34
2.5.5 刪除字段 36
2.5.6 修改字段的排列位置 37
2.5.7 更改表的存儲引擎 38
2.5.8 刪除表的外鍵約束 39
2.6 刪除數(shù)據(jù)表 40
2.6.1 刪除沒有被關(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 專家解惑 54
2.11 經(jīng)典習(xí)題 54
第3章 數(shù)據(jù)類型和運算符 56
3.1 MySQL數(shù)據(jù)類型介紹 56
3.1.1 整數(shù)類型 56
3.1.2 浮點數(shù)類型和定點數(shù)類型 58
3.1.3 日期與時間類型 60
3.1.4 文本字符串類型 71
3.1.5 二進制字符串類型 76
3.2 如何選擇數(shù)據(jù)類型 79
3.3 常見運算符介紹 80
3.3.1 運算符概述 80
3.3.2 算術(shù)運算符 81
3.3.3 比較運算符 82
3.3.4 邏輯運算符 90
3.3.5 位運算符 92
3.3.6 運算符的優(yōu)先級 95
3.4 綜合案例——運算符的使用 96
3.5 專家解惑 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 同時插入多條記錄 103
4.1.4 將查詢結(jié)果插入表中 105
4.2 更新數(shù)據(jù) 107
4.3 刪除數(shù)據(jù) 109
4.4 為表增加計算列 111
4.5 MySQL 8.0的新特性——DDL的原子化 112
4.6 綜合案例——記錄的插入、更新和刪除 113
4.7 專家解惑 117
4.8 經(jīng)典習(xí)題 118
第5章 索引 119
5.1 索引簡介 119
5.1.1 索引的含義和特點 119
5.1.2 索引的分類 120
5.1.3 索引的設(shè)計原則 121
5.2 創(chuàng)建索引 121
5.2.1 創(chuàng)建表的時候創(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)計直方圖 138
5.5.1 直方圖的優(yōu)點 139
5.5.2 直方圖的基本操作 139
5.6 綜合案例——創(chuàng)建索引 141
5.7 專家解惑 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)建視圖的語法形式 147
6.2.2 在單表上創(chuàng)建視圖 147
6.2.3 在多表上創(chuàng)建視圖 148
6.3 查看視圖 149
6.3.1 使用DESCRIBE語句查看視圖的基本信息 149
6.3.2 使用SHOW TABLE STATUS語句查看視圖的基本信息 150
6.3.3 使用SHOW CREATE VIEW語句查看視圖的詳細(xì)信息 151
6.3.4 在views表中查看視圖的詳細(xì)信息 152
6.4 修改視圖 153
6.4.1 使用CREATE OR REPLACE VIEW語句修改視圖 153
6.4.2 使用ALTER語句修改視圖 154
6.5 更新視圖 155
6.6 刪除視圖 158
6.7 綜合案例——視圖應(yīng)用 158
6.8 專家解惑 166
6.9 經(jīng)典習(xí)題 167
第7章 查詢數(shù)據(jù) 168
7.1 基本查詢語句 168
7.2 單表查詢 170
7.2.1 查詢所有字段 171
7.2.2 查詢指定字段 172
7.2.3 查詢指定記錄 173
7.2.4 帶IN關(guān)鍵字的查詢 175
7.2.5 帶BETWEEN AND的范圍查詢 176
7.2.6 帶LIKE的字符匹配查詢 178
7.2.7 查詢空值 179
7.2.8 帶AND的多條件查詢 181
7.2.9 帶OR的多條件查詢 182
7.2.10 查詢結(jié)果不重復(fù) 183
7.2.11 對查詢結(jié)果排序 184
7.2.12 分組查詢 188
7.2.13 使用LIMIT限制查詢結(jié)果的數(shù)量 193
7.3 使用集合函數(shù)查詢 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 連接查詢 199
7.4.1 內(nèi)連接查詢 199
7.4.2 外連接查詢 202
7.4.3 復(fù)合條件連接查詢 204
7.5 子查詢 205
7.5.1 帶ANY、SOME關(guān)鍵字的子查詢 205
7.5.2 帶ALL關(guān)鍵字的子查詢 206
7.5.3 帶EXISTS關(guān)鍵字的子查詢 207
7.5.4 帶IN關(guān)鍵字的子查詢 208
7.5.5 帶比較運算符的子查詢 210
7.6 合并查詢結(jié)果 211
7.7 為表和字段取別名 214
7.7.1 為表取別名 214
7.7.2 為字段取別名 216
7.8 使用正則表達(dá)式查詢 217
7.8.1 查詢以特定字符或字符串開頭的記錄 218
7.8.2 查詢以特定字符或字符串結(jié)尾的記錄 219
7.8.3 用符號“.”來替代字符串中的任意一個字符 219
7.8.4 使用“*”和“ ”匹配多個字符 220
7.8.5 匹配指定字符串 220
7.8.6 匹配指定字符中的任意一個 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ù)表查詢操作 230
7.12 專家解惑 237
7.13 經(jīng)典習(xí)題 237
第8章 MySQL函數(shù) 239
8.1 MySQL函數(shù)簡介 239
8.2 數(shù)學(xué)函數(shù) 240
8.3 字符串函數(shù) 241
8.3.1 計算字符串字符數(shù)的函數(shù)和計算字符串長度的函數(shù) 242
8.3.2 合并字符串函數(shù)CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 242
8.3.3 替換字符串的函數(shù)INSERT(s1,x,len,s2)和字母大小寫轉(zhuǎn)換函數(shù) 242
8.3.4 獲取指定長度的字符串的函數(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 匹配子串開始位置的函數(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ù) 249
8.4.1 獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前時間的函數(shù) 249
8.4.2 獲取當(dāng)前日期和時間的函數(shù) 250
8.4.3 UNIX時間戳函數(shù) 250
8.4.4 返回UTC日期的函數(shù)和返回UTC時間的函數(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ù) 254
8.4.10 獲取日期的指定值的函數(shù)EXTRACT(type FROM date) 255
8.4.11 時間和秒鐘轉(zhuǎn)換的函數(shù) 255
8.4.12 計算日期和時間的函數(shù) 256
8.4.13 將日期和時間格式化的函數(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版本號、連接數(shù)和數(shù)據(jù)庫名的函數(shù) 264
8.6.2 獲取用戶名的函數(shù) 266
8.6.3 獲取字符串的字符集和排序方式的函數(shù) 266
8.6.4 獲取后一個自動生成的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 專家解惑 274
8.11 經(jīng)典習(xí)題 275
第9章 存儲過程和函數(shù) 277
9.1 創(chuàng)建存儲過程和函數(shù) 277
9.1.1 創(chuàng)建存儲過程 278
9.1.2 創(chuàng)建存儲函數(shù) 280
9.1.3 變量的使用 281
9.1.4 定義條件和處理程序 282
9.1.5 光標(biāo)的使用 285
9.1.6 流程控制的使用 286
9.2 調(diào)用存儲過程和函數(shù) 291
9.2.1 調(diào)用存儲過程 291
9.2.2 調(diào)用存儲函數(shù) 292
9.3 查看存儲過程和函數(shù) 292
9.3.1 使用SHOW STATUS語句查看存儲過程和函數(shù)的狀態(tài) 293
9.3.2 使用SHOW CREATE語句查看存儲過程和函數(shù)的定義 293
9.3.3 從information_schema.Routines表中查看存儲過程和函數(shù)的信息 294
9.4 修改存儲過程和函數(shù) 295
9.5 刪除存儲過程和函數(shù) 297
9.6 MySQL 8.0的新特性——全局變量的持久化 298
9.7 綜合案例——創(chuàng)建存儲過程和函數(shù) 299
9.8 專家解惑 302
9.9 經(jīng)典習(xí)題 302
第10章 MySQL觸發(fā)器 303
10.1 創(chuàng)建觸發(fā)器 303
10.1.1 創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器 304
10.1.2 創(chuàng)建有多個執(zhí)行語句的觸發(fā)器 304
10.2 查看觸發(fā)器 307
10.2.1 使用SHOW TRIGGERS語句查看觸發(fā)器信息 307
10.2.2 在triggers表中查看觸發(fā)器信息 309
10.3 觸發(fā)器的使用 310
10.4 刪除觸發(fā)器 311
10.5 綜合案例——觸發(fā)器的使用 312
10.6 專家解惑 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 賬戶管理 320
11.2.1 登錄和退出MySQL服務(wù)器 321
11.2.2 新建普通用戶 322
11.2.3 刪除普通用戶 324
11.2.4 root用戶修改自己的密碼 325
11.2.5 root用戶修改普通用戶密碼 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 訪問控制 333
11.4.1 連接核實階段 333
11.4.2 請求核實階段 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 綜合案例——綜合管理用戶權(quán)限 339
11.8 專家解惑 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ù)制整個數(shù)據(jù)庫目錄 350
12.1.3 使用MySQLhotcopy工具快速備份 351
12.2 數(shù)據(jù)恢復(fù) 351
12.2.1 使用MySQL命令恢復(fù) 351
12.2.2 直接復(fù)制到數(shù)據(jù)庫目錄 352
12.2.3 MySQLhotcopy快速恢復(fù) 353
12.3 數(shù)據(jù)庫遷移 353
12.3.1 相同版本的MySQL數(shù)據(jù)庫之間的遷移 353
12.3.2 不同版本的MySQL數(shù)據(jù)庫之間的遷移 354
12.3.3 不同數(shù)據(jù)庫之間的遷移 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 專家解惑 372
12.7 經(jīng)典習(xí)題 373
第13章 MySQL日志 374
13.1 日志簡介 374
13.2 二進制日志 375
13.2.1 啟動和設(shè)置二進制日志 375
13.2.2 查看二進制日志 376
13.2.3 刪除二進制日志 378
13.2.4 使用二進制日志恢復(fù)數(shù)據(jù)庫 380
13.2.5 暫時停止二進制日志功能 380
13.3 錯誤日志 381
13.3.1 啟動和設(shè)置錯誤日志 381
13.3.2 查看錯誤日志 381
13.3.3 刪除錯誤日志 382
13.4 通用查詢?nèi)罩?383
13.4.1 啟動通用查詢?nèi)罩?383
13.4.2 查看通用查詢?nèi)罩?383
13.4.3 刪除通用查詢?nèi)罩?384
13.5 慢查詢?nèi)罩?384
13.5.1 啟動和設(shè)置慢查詢?nèi)罩?385
13.5.2 查看慢查詢?nèi)罩?385
13.5.3 刪除慢查詢?nèi)罩?386
13.6 MySQL 8.0的新特性——日志分類更詳細(xì) 386
13.7 綜合案例——MySQL日志的綜合管理 386
13.8 專家解惑 392
13.9 經(jīng)典習(xí)題 393
第14章 性能優(yōu)化 394
14.1 優(yōu)化簡介 394
14.2 優(yōu)化查詢 395
14.2.1 分析查詢語句 395
14.2.2 索引對查詢速度的影響 398
14.2.3 使用索引查詢 399
14.2.4 優(yōu)化子查詢 402
14.3 優(yōu)化數(shù)據(jù)庫結(jié)構(gòu) 402
14.3.1 將字段很多的表分解成多個表 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 臨時表性能優(yōu)化 411
14.6 服務(wù)器語句超時處理 413
14.7 創(chuàng)建全局通用表空間 414
14.8 MySQL 8.0的新特性1——支持不可見索引 414
14.9 MySQL 8.0的新特性2——增加資源組 416
14.10 綜合案例——全面優(yōu)化MySQL服務(wù)器 418
14.11 專家解惑 420
14.12 經(jīng)典習(xí)題 421
第15章 綜合項目1——論壇管理系統(tǒng)數(shù)據(jù)庫設(shè)計 422
15.1 系統(tǒng)概述 422
15.2 系統(tǒng)功能 423
15.3 數(shù)據(jù)庫設(shè)計和實現(xiàn) 424
15.3.1 設(shè)計方案圖表 424
15.3.2 設(shè)計表 426
15.3.3 設(shè)計索引 429
15.3.4 設(shè)計視圖 430
15.3.5 設(shè)計觸發(fā)器 431
第16章 綜合項目2——新聞發(fā)布系統(tǒng)數(shù)據(jù)庫設(shè)計 433
16.1 系統(tǒng)概述 433
16.2 系統(tǒng)功能 434
16.3 數(shù)據(jù)庫設(shè)計和實現(xiàn) 435
16.3.1 設(shè)計表 435
16.3.2 設(shè)計索引 439
16.3.3 設(shè)計視圖 440
16.3.4 設(shè)計觸發(fā)器 441