內容簡介
本書內容主要包括MySQL的安裝與配置、資料庫的創建、數據表的創建、數據類型和運算符、數據表的操作(插入、更新與刪除數據)、索引、視圖、查詢數據、MySQL函式、存儲過程和函式、觸發器、用戶管理、數據備份與還原、MySQL日誌、性能最佳化。最後通過兩個綜合案例的資料庫設計進一步講述MySQL在實際工作中的套用,重點介紹MySQL的安裝與配置、數據類型和運算符以及數據表的操作。本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。
本書共有400個實例和14個綜合案例,還有大量的經典習題。隨書贈送了近20小時培訓班形式的視頻教學錄像,詳細講解書中每一個知識點和每一個資料庫操作的方法和技巧。同時還提供本書所有例子的原始碼,讀者可以直接查看和調用。
本書適合MySQL資料庫初學者、MySQL資料庫開發人員和MySQL資料庫管理員學習,同時也能作為高等院校相關專業師生的教學用書。
圖書目錄
第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 啟動服務並登錄MySQL資料庫 9
1.2.1 啟動MySQL服務 9
1.2.2 登錄MySQL資料庫 10
1.2.3 配置Path變數 11
1.3 MySQL常用圖形管理工具 13
1.4 在Linux平台下安裝與配置MySQL 8.0 14
1.4.1 Linux作業系統下的MySQL版本介紹 14
1.4.2 安裝和配置MySQL的RPM包 15
1.4.3 安裝和配置MySQL的源碼包 18
1.5 專家解惑 19
1.6 經典習題 19
第2章 運算元據庫和數據表 20
2.1 創建資料庫 20
2.2 刪除資料庫 22
2.3 創建數據表 22
2.3.1 創建表的語法形式 22
2.3.2 使用主鍵約束 24
2.3.3 使用外鍵約束 25
2.3.4 使用非空約束 26
2.3.5 使用唯一性約束 27
2.3.6 使用默認約束 27
2.3.7 設定表的屬性值自動增加 28
2.4 查看數據表結構 29
2.4.1 查看錶基本結構語句DESCRIBE 29
2.4.2 查看錶詳細結構語句SHOW CREATE TABLE 30
2.5 修改數據表 31
2.5.1 修改表名 31
2.5.2 修改欄位的數據類型 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 刪除數據表 40
2.6.1 刪除沒有被關聯的表 41
2.6.2 刪除被其他表關聯的主表 41
2.7 MySQL 8.0的新特性1——默認字元集改為utf8mb4 43
2.8 MySQL 8.0的新特性2——自增變數的持久化 44
2.9 綜合案例——數據表的基本操作 46
2.10 專家解惑 54
2.11 經典習題 54
第3章 數據類型和運算符 56
3.1 MySQL數據類型介紹 56
3.1.1 整數類型 56
3.1.2 浮點數類型和定點數類型 58
3.1.3 日期與時間類型 60
3.1.4 文本字元串類型 71
3.1.5 二進制字元串類型 76
3.2 如何選擇數據類型 79
3.3 常見運算符介紹 80
3.3.1 運算符概述 80
3.3.2 算術運算符 81
3.3.3 比較運算符 82
3.3.4 邏輯運算符 90
3.3.5 位運算符 92
3.3.6 運算符的優先權 95
3.4 綜合案例——運算符的使用 96
3.5 專家解惑 98
3.6 經典習題 99
第4章 插入、更新與刪除數據 100
4.1 插入數據 100
4.1.1 為表的所有欄位插入數據 100
4.1.2 為表的指定欄位插入數據 102
4.1.3 同時插入多條記錄 103
4.1.4 將查詢結果插入表中 105
4.2 更新數據 107
4.3 刪除數據 109
4.4 為表增加計算列 111
4.5 MySQL 8.0的新特性——DDL的原子化 112
4.6 綜合案例——記錄的插入、更新和刪除 113
4.7 專家解惑 117
4.8 經典習題 118
第5章 索引 119
5.1 索引簡介 119
5.1.1 索引的含義和特點 119
5.1.2 索引的分類 120
5.1.3 索引的設計原則 121
5.2 創建索引 121
5.2.1 創建表的時候創建索引 121
5.2.2 在已經存在的表上創建索引 127
5.3 刪除索引 134
5.4 MySQL 8.0的新特性1——支持降序索引 136
5.5 MySQL 8.0的新特性2——統計直方圖 138
5.5.1 直方圖的優點 139
5.5.2 直方圖的基本操作 139
5.6 綜合案例——創建索引 141
5.7 專家解惑 143
5.8 經典習題 143
第6章 視圖 145
6.1 視圖概述 145
6.1.1 視圖的含義 145
6.1.2 視圖的作用 146
6.2 創建視圖 147
6.2.1 創建視圖的語法形式 147
6.2.2 在單表上創建視圖 147
6.2.3 在多表上創建視圖 148
6.3 查看視圖 149
6.3.1 使用DESCRIBE語句查看視圖的基本信息 149
6.3.2 使用SHOW TABLE STATUS語句查看視圖的基本信息 150
6.3.3 使用SHOW CREATE VIEW語句查看視圖的詳細信息 151
6.3.4 在views表中查看視圖的詳細信息 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 綜合案例——視圖套用 158
6.8 專家解惑 166
6.9 經典習題 167
第7章 查詢數據 168
7.1 基本查詢語句 168
7.2 單表查詢 170
7.2.1 查詢所有欄位 171
7.2.2 查詢指定欄位 172
7.2.3 查詢指定記錄 173
7.2.4 帶IN關鍵字的查詢 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 查詢結果不重複 183
7.2.11 對查詢結果排序 184
7.2.12 分組查詢 188
7.2.13 使用LIMIT限制查詢結果的數量 193
7.3 使用集合函式查詢 194
7.3.1 COUNT()函式 194
7.3.2 SUM()函式 195
7.3.3 AVG()函式 196
7.3.4 MAX()函式 197
7.3.5 MIN()函式 198
7.4 連線查詢 199
7.4.1 內連線查詢 199
7.4.2 外連線查詢 202
7.4.3 複合條件連線查詢 204
7.5 子查詢 205
7.5.1 帶ANY、SOME關鍵字的子查詢 205
7.5.2 帶ALL關鍵字的子查詢 206
7.5.3 帶EXISTS關鍵字的子查詢 207
7.5.4 帶IN關鍵字的子查詢 208
7.5.5 帶比較運算符的子查詢 210
7.6 合併查詢結果 211
7.7 為表和欄位取別名 214
7.7.1 為表取別名 214
7.7.2 為欄位取別名 216
7.8 使用正則表達式查詢 217
7.8.1 查詢以特定字元或字元串開頭的記錄 218
7.8.2 查詢以特定字元或字元串結尾的記錄 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}指定字元串連續出現的次數 223
7.9 MySQL 8.0的新特性1——GROUP BY不再隱式排序 224
7.10 MySQL 8.0的新特性2——通用表表達式 226
7.11 綜合案例——數據表查詢操作 230
7.12 專家解惑 237
7.13 經典習題 237
第8章 MySQL函式 239
8.1 MySQL函式簡介 239
8.2 數學函式 240
8.3 字元串函式 241
8.3.1 計算字元串字元數的函式和計算字元串長度的函式 242
8.3.2 合併字元串函式CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 242
8.3.3 替換字元串的函式INSERT(s1,x,len,s2)和字母大小寫轉換函式 242
8.3.4 獲取指定長度的字元串的函式LEFT(s,n)和RIGHT(s,n) 243
8.3.5 填充字元串的函式LPAD(s1,len,s2)和RPAD(s1,len,s2) 243
8.3.6 刪除空格的函式LTRIM(s)和RTRIM(s) 244
8.3.7 刪除指定字元串的函式TRIM(s1 FROM s) 244
8.3.8 重複生成字元串的函式REPEAT(s,n) 244
8.3.9 空格函式SPACE(n)和替換函式REPLACE(s,s1,s2) 245
8.3.10 比較字元串大小的函式STRCMP(s1,s2) 245
8.3.11 獲取子串的函式SUBSTRING(s,n,len)和MID(s,n,len) 245
8.3.12 匹配子串開始位置的函式 246
8.3.13 字元串逆序的函式REVERSE(s) 247
8.3.14 返回指定位置的字元串的函式 247
8.3.15 返回指定字元串位置的函式FIELD(s,s1,s2,…) 247
8.3.16 返回子串位置的函式FIND_IN_SET(s1,s2) 248
8.3.17 選取字元串的函式MAKE_SET(x,s1,s2,…) 248
8.4 日期和時間函式 249
8.4.1 獲取當前日期的函式和獲取當前時間的函式 249
8.4.2 獲取當前日期和時間的函式 250
8.4.3 UNIX時間戳函式 250
8.4.4 返回UTC日期的函式和返回UTC時間的函式 251
8.4.5 獲取月份的函式MONTH(date)和MONTHNAME(date) 251
8.4.6 獲取星期的函式DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 252
8.4.7 獲取星期數的函式WEEK(d)和WEEKOFYEAR(d) 253
8.4.8 獲取天數的函式DAYOFYEAR(d)和DAYOFMONTH(d) 254
8.4.9 獲取年份、季度、小時、分鐘和秒鐘的函式 254
8.4.10 獲取日期的指定值的函式EXTRACT(type FROM date) 255
8.4.11 時間和秒鐘轉換的函式 255
8.4.12 計算日期和時間的函式 256
8.4.13 將日期和時間格式化的函式 259
8.5 條件判斷函式 262
8.5.1 IF(expr,v1,v2)函式 262
8.5.2 IFNULL(v1,v2)函式 262
8.5.3 CASE函式 263
8.6 系統信息函式 264
8.6.1 獲取MySQL版本號、連線數和資料庫名的函式 264
8.6.2 獲取用戶名的函式 266
8.6.3 獲取字元串的字元集和排序方式的函式 266
8.6.4 獲取最後一個自動生成的ID值的函式 267
8.7 MySQL 8.0的新特性1——加密函式 268
8.7.1 加密函式MD5(str) 269
8.7.2 加密函式SHA(str) 269
8.7.3 加密函式SHA2(str, hash_length) 269
8.8 MySQL 8.0的新特性2——視窗函式 270
8.9 綜合案例——MySQL函式的使用 271
8.10 專家解惑 274
8.11 經典習題 275
第9章 存儲過程和函式 277
9.1 創建存儲過程和函式 277
9.1.1 創建存儲過程 278
9.1.2 創建存儲函式 280
9.1.3 變數的使用 281
9.1.4 定義條件和處理程式 282
9.1.5 游標的使用 285
9.1.6 流程控制的使用 286
9.2 調用存儲過程和函式 291
9.2.1 調用存儲過程 291
9.2.2 調用存儲函式 292
9.3 查看存儲過程和函式 292
9.3.1 使用SHOW STATUS語句查看存儲過程和函式的狀態 293
9.3.2 使用SHOW CREATE語句查看存儲過程和函式的定義 293
9.3.3 從information_schema.Routines表中查看存儲過程和函式的信息 294
9.4 修改存儲過程和函式 295
9.5 刪除存儲過程和函式 297
9.6 MySQL 8.0的新特性——全局變數的持久化 298
9.7 綜合案例——創建存儲過程和函式 299
9.8 專家解惑 302
9.9 經典習題 302
第10章 MySQL觸發器 303
10.1 創建觸發器 303
10.1.1 創建只有一個執行語句的觸發器 304
10.1.2 創建有多個執行語句的觸發器 304
10.2 查看觸發器 307
10.2.1 使用SHOW TRIGGERS語句查看觸發器信息 307
10.2.2 在triggers表中查看觸發器信息 309
10.3 觸發器的使用 310
10.4 刪除觸發器 311
10.5 綜合案例——觸發器的使用 312
10.6 專家解惑 314
10.7 經典習題 314
第11章 MySQL許可權與安全管理 315
11.1 許可權表 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伺服器 321
11.2.2 新建普通用戶 322
11.2.3 刪除普通用戶 324
11.2.4 root用戶修改自己的密碼 325
11.2.5 root用戶修改普通用戶密碼 326
11.3 許可權管理 327
11.3.1 MySQL的各種許可權 327
11.3.2 授權 329
11.3.3 收回許可權 331
11.3.4 查看許可權 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 綜合案例——綜合管理用戶許可權 339
11.8 專家解惑 342
11.9 經典習題 342
第12章 數據備份與恢復 344
12.1 數據備份 344
12.1.1 使用MySQLdump命令備份 344
12.1.2 直接複製整個資料庫 350
12.1.3 使用MySQLhotcopy工具快速備份 351
12.2 數據恢復 351
12.2.1 使用MySQL命令恢復 351
12.2.2 直接複製到資料庫 352
12.2.3 MySQLhotcopy快速恢復 353
12.3 資料庫遷移 353
12.3.1 相同版本的MySQL資料庫之間的遷移 353
12.3.2 不同版本的MySQL資料庫之間的遷移 354
12.3.3 不同資料庫之間的遷移 354
12.4 表的導出和導入 354
12.4.1 使用SELECTI…NTO OUTFILE導出文本檔案 355
12.4.2 使用MySQLdump命令導出文本檔案 359
12.4.3 使用MySQL命令導出文本檔案 361
12.4.4 使用LOAD DATA INFILE方式導入文本檔案 364
12.4.5 使用MySQLimport命令導入文本檔案 367
12.5 綜合案例——數據的備份與恢復 368
12.6 專家解惑 372
12.7 經典習題 373
第13章 MySQL日誌 374
13.1 日誌簡介 374
13.2 二進制日誌 375
13.2.1 啟動和設定二進制日誌 375
13.2.2 查看二進制日誌 376
13.2.3 刪除二進制日誌 378
13.2.4 使用二進制日誌恢複數據庫 380
13.2.5 暫時停止二進制日誌功能 380
13.3 錯誤日誌 381
13.3.1 啟動和設定錯誤日誌 381
13.3.2 查看錯誤日誌 381
13.3.3 刪除錯誤日誌 382
13.4 通用查詢日誌 383
13.4.1 啟動通用查詢日誌 383
13.4.2 查看通用查詢日誌 383
13.4.3 刪除通用查詢日誌 384
13.5 慢查詢日誌 384
13.5.1 啟動和設定慢查詢日誌 385
13.5.2 查看慢查詢日誌 385
13.5.3 刪除慢查詢日誌 386
13.6 MySQL 8.0的新特性——日誌分類更詳細 386
13.7 綜合案例——MySQL日誌的綜合管理 386
13.8 專家解惑 392
13.9 經典習題 393
第14章 性能最佳化 394
14.1 最佳化簡介 394
14.2 最佳化查詢 395
14.2.1 分析查詢語句 395
14.2.2 索引對查詢速度的影響 398
14.2.3 使用索引查詢 399
14.2.4 最佳化子查詢 402
14.3 最佳化資料庫結構 402
14.3.1 將欄位很多的表分解成多個表 403
14.3.2 增加中間表 404
14.3.3 增加冗餘欄位 405
14.3.4 最佳化插入記錄的速度 406
14.3.5 分析表、檢查表和最佳化表 407
14.4 最佳化MySQL伺服器 409
14.4.1 最佳化伺服器硬體 409
14.4.2 最佳化MySQL的參數 410
14.5 臨時表性能最佳化 411
14.6 伺服器語句逾時處理 413
14.7 創建全局通用表空間 414
14.8 MySQL 8.0的新特性1——支持不可見索引 414
14.9 MySQL 8.0的新特性2——增加資源組 416
14.10 綜合案例——全面最佳化MySQL伺服器 418
14.11 專家解惑 420
14.12 經典習題 421
第15章 綜合項目1——論壇管理系統資料庫設計 422
15.1 系統概述 422
15.2 系統功能 423
15.3 資料庫設計和實現 424
15.3.1 設計方案圖表 424
15.3.2 設計表 426
15.3.3 設計索引 429
15.3.4 設計視圖 430
15.3.5 設計觸發器 431
第16章 綜合項目2——新聞發布系統資料庫設計 433
16.1 系統概述 433
16.2 系統功能 434
16.3 資料庫設計和實現 435
16.3.1 設計表 435
16.3.2 設計索引 439
16.3.3 設計視圖 440
16.3.4 設計觸發器 441