MySQL 8.x從入門到精通(視頻教學版)
內容描述
MySQL是比較受歡迎的開源關系型數據庫之一。本書通過大量實用的操作案例,詳細講解MySQL 8.x數據庫操作方法和技巧。本書配套資源提供了所有例子的源代碼、PPT課件、培訓班形式的同步教學視頻、命令速查手冊、QQ群與微信群答疑,以方便讀者參考和自學。
本書共分25章。主要內容包括MySQL 8.x的安裝與配置、數據庫和數據表基本操作、數據類型和運算符、MySQL函數、數據的增刪改查、索引的設計和使用、存儲過程和函數、視圖、觸發器、存儲引擎的選擇、分區和事務控制、性能優化、鎖定機制、服務器性能優化、性能監控、數據備份與還原、日誌、權限與安全管理、高可用架構、復制、MySQL Utilities、MySQL Proxy。最後通過兩個案例系統的數據庫設計,進一步講解MySQL在系統開發中的應用。本書註重實戰操作,幫助讀者循序漸進地掌握MySQL的各項管理與開發技術。
本書適合MySQL數據庫初學者、MySQL數據庫開發人員和MySQL數據庫管理員,同時也能作為高等院校相關專業師生的教學用書。
目錄大綱
目 錄
第1章 MySQL的安裝與配置 1
1.1 什麽是MySQL 1
1.1.1 客戶端/服務器軟件 1
1.1.2 MySQL版本 2
1.2 Windows平臺下安裝與配置MySQL 8.0 2
1.2.1 安裝MySQL 8.0 2
1.2.2 配置MySQL 8.0 5
1.3 啟動服務並登錄MySQL數據庫 9
1.3.1 啟動MySQL服務 9
1.3.2 登錄MySQL數據庫 10
1.3.3 配置Path變量 11
1.4 MySQL常用圖形管理工具 13
1.5 Linux平臺下安裝與配置MySQL 8.0 14
1.5.1 Linux操作系統下的MySQL版本介紹 14
1.5.2 安裝和配置MySQL的RPM包 15
1.5.3 安裝和配置MySQL的源碼包 18
第2章 數據庫和數據表的基本操作 19
2.1 創建數據庫 19
2.2 刪除數據庫 20
2.3 創建數據表 21
2.3.1 創建表的語法形式 21
2.3.2 使用主鍵約束 22
2.3.3 使用外鍵約束 23
2.3.4 使用非空約束 24
2.3.5 使用唯一性約束 25
2.3.6 使用默認約束 25
2.3.7 設置表的屬性值自動增加 26
2.4 查看數據表結構 27
2.4.1 查看表基本結構語句DESCRIBE 27
2.4.2 查看表詳細結構語句SHOW CREATE TABLE 28
2.5 修改數據表 28
2.5.1 修改表名 29
2.5.2 修改字段的數據類型 29
2.5.3 修改字段名 30
2.5.4 添加字段 31
2.5.5 刪除字段 33
2.5.6 修改字段的排列位置 34
2.5.7 刪除表的外鍵約束 35
2.6 刪除數據表 36
2.6.1 刪除沒有被關聯的表 36
2.6.2 刪除被其他表關聯的主表 37
第3章 數據類型和運算符 39
3.1 MySQL數據類型介紹 39
3.1.1 整數類型 39
3.1.2 小數類型 41
3.1.3 日期與時間類型 42
3.1.4 文本字符串類型 52
3.1.5 二進制字符串類型 56
3.2 如何選擇數據類型 59
3.3 常見運算符介紹 60
3.3.1 運算符概述 60
3.3.2 算術運算符 61
3.3.3 比較運算符 62
3.3.4 邏輯運算符 69
3.3.5 位運算符 71
3.3.6 運算符的優先級 74
第4章 MySQL函數 75
4.1 MySQL函數簡介 75
4.2 數學函數 75
4.2.1 絕對值函數ABS(x)和返回圓周率的函數PI() 75
4.2.2 平方根函數SQRT(x)和求餘函數MOD(x,y) 76
4.2.3 獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x) 76
4.2.4 獲取隨機數的函數RAND()和RAND(x) 77
4.2.5 函數ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 78
4.2.6 符號函數SIGN(x) 79
4.2.7 冪運算函數POW(x,y)、POWER(x,y)和EXP(x) 79
4.2.8 對數運算函數LOG(x)和LOG10(x) 79
4.2.9 角度與弧度相互轉換的函數RADIANS(x)和DEGREES(x) 80
4.2.10 正弦函數SIN(x)和反正弦函數ASIN(x) 80
4.2.11 餘弦函數COS(x)和反餘弦函數ACOS(x) 81
4.2.12 正切函數、反正切函數和餘切函數 81
4.3 字符串函數 82
4.3.1 計算字符串字符數的函數和字符串長度的函數 82
4.3.2 合並字符串函數CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 83
4.3.3 替換字符串的函數INSERT(s1,x,len,s2) 83
4.3.4 字母大小寫轉換函數 84
4.3.5 獲取指定長度的字符串的函數LEFT(s,n)和RIGHT(s,n) 85
4.3.6 填充字符串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2) 85
4.3.7 刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s) 86
4.3.8 刪除指定字符串的函數TRIM(s1 FROM s) 86
4.3.9 重復生成字符串的函數REPEAT(s,n) 87
4.3.10 空格函數SPACE(n)和替換函數REPLACE(s,s1,s2) 87
4.3.11 比較字符串大小的函數STRCMP(s1,s2) 88
4.3.12 獲取子串的函數SUBSTRING(s,n,len)和MID(s,n,len) 88
4.3.13 匹配子串開始位置的函數 89
4.3.14 字符串逆序的函數REVERSE(s) 89
4.3.15 返回指定位置的字符串的函數 89
4.3.16 返回指定字符串位置的函數FIELD(s,s1,s2,…,sn) 90
4.3.17 返回子串位置的函數FIND_IN_SET(s1,s2) 90
4.3.18 選取字符串的函數MAKE_SET(x,s1,s2,…,sn) 90
4.4 日期和時間函數 91
4.4.1 獲取當前日期的函數和獲取當前時間的函數 91
4.4.2 獲取當前日期和時間的函數 92
4.4.3 UNIX時間戳函數 92
4.4.4 返回UTC日期的函數和返回UTC時間的函數 92
4.4.5 獲取月份的函數MONTH(date)和MONTHNAME(date) 93
4.4.6 獲取星期的函數DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 93
4.4.7 獲取星期數的函數WEEK(d)和WEEKOFYEAR(d) 94
4.4.8 獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d) 95
4.4.9 獲取年份、季度、小時、分鐘和秒鐘的函數 96
4.4.10 獲取日期的指定值的函數EXTRACT(type FROM date) 96
4.4.11 時間和秒鐘轉換的函數 97
4.4.12 計算日期和時間的函數 97
4.4.13 將日期和時間格式化的函數 100
4.5 條件判斷函數 102
4.5.1 IF(expr,v1,v2)函數 102
4.5.2 IFNULL(v1,v2)函數 103
4.5.3 CASE函數 103
4.6 系統信息函數 104
4.6.1 獲取MySQL版本號、連接數和數據庫名的函數 104
4.6.2 獲取用戶名的函數 106
4.6.3 獲取字符串的字符集和排序方式的函數 106
4.6.4 獲取最後一個自動生成的ID值的函數 107
4.7 加密函數 108
4.7.1 加密函數MD5(str) 108
4.7.2 加密函數SHA(str) 108
4.7.3 加密函數SHA2(str, hash_length) 109
4.8 其他函數 109
4.8.1 格式化函數FORMAT(x,n) 109
4.8.2 不同進制的數字進行轉換的函數 109
4.8.3 IP地址與數字相互轉換的函數 110
4.8.4 加鎖函數和解鎖函數 111
4.8.5 重復執行指定操作的函數 111
4.8.6 改變字符集的函數 112
4.8.7 改變數據類型的函數 112
4.9 窗口函數 113
第5章 查詢數據 115
5.1 基本查詢語句 115
5.2 單表查詢 117
5.2.1 查詢所有字段 117
5.2.2 查詢指定字段 118
5.2.3 查詢指定記錄 120
5.2.4 帶IN關鍵字的查詢 121
5.2.5 帶BETWEEN…AND…的範圍查詢 122
5.2.6 帶LIKE的字符匹配查詢 123
5.2.7 查詢空值 124
5.2.8 帶AND的多條件查詢 126
5.2.9 帶OR的多條件查詢 126
5.2.10 查詢結果不重復 127
5.2.11 對查詢結果排序 128
5.2.12 分組查詢 131
5.2.13 使用LIMIT限制查詢結果的數量 136
5.3 使用集合函數查詢 137
5.3.1 COUNT()函數 137
5.3.2 SUM()函數 138
5.3.3 AVG()函數 139
5.3.4 MAX()函數 140
5.3.5 MIN()函數 141
5.4 連接查詢 141
5.4.1 內連接查詢 142
5.4.2 外連接查詢 144
5.4.3 復合條件連接查詢 146
5.5 子查詢 147
5.5.1 帶ANY、SOME關鍵字的子查詢 147
5.5.2 帶ALL關鍵字的子查詢 147
5.5.3 帶EXISTS關鍵字的子查詢 148
5.5.4 帶IN關鍵字的子查詢 149
5.5.5 帶比較運算符的子查詢 151
5.6 合並查詢結果 152
5.7 為表和字段取別名 154
5.7.1 為表取別名 154
5.7.2 為字段取別名 155
5.8 使用正則表達式查詢 157
5.8.1 查詢以特定字符或字符串開頭的記錄 157
5.8.2 查詢以特定字符或字符串結尾的記錄 158
5.8.3 用符號“.”來替代字符串中的任意一個字符 158
5.8.4 使用“*”和“+”來匹配多個字符 159
5.8.5 匹配指定字符串 159
5.8.6 匹配指定字符中的任意一個 160
5.8.7 匹配指定字符以外的字符 161
5.8.8 使用{n,}或者{n,m}來指定字符串連續出現的次數 162
5.9 通用表表達式 162
第6章 插入、更新與刪除數據 166
6.1 插入數據 166
6.1.1 為表的所有字段插入數據 166
6.1.2 為表的指定字段插入數據 168
6.1.3 同時插入多條記錄 169
6.1.4 將查詢結果插入到表中 170
6.2 更新數據 172
6.3 刪除數據 173
6.4 為表增加計算列 175
6.5 DDL的原子化 176
第7章 索引的設計和使用 178
7.1 索引簡介 178
7.1.1 索引的含義和特點 178
7.1.2 索引的分類 179
7.1.3 索引的設計原則 180
7.2 創建索引 180
7.2.1 創建表的時候創建索引 180
7.2.2 在已經存在的表上創建索引 185
7.3 刪除索引 191
7.4 統計直方圖 193
7.4.1 直方圖的優點 193
7.4.2 直方圖的基本操作 193
第8章 存儲過程和函數 195
8.1 創建存儲過程和函數 195
8.1.1 創建存儲過程 195
8.1.2 創建存儲函數 197
8.1.3 變量的使用 198
8.1.4 定義條件和處理程序 199
8.1.5 光標的使用 202
8.1.6 流程控制的使用 203
8.2 調用存儲過程和函數 207
8.2.1 調用存儲過程 207
8.2.2 調用存儲函數 208
8.3 查看存儲過程和函數 208
8.3.1 使用SHOW STATUS語句查看存儲過程和函數的狀態 208
8.3.2 使用SHOW CREATE語句查看存儲過程和函數的定義 209
8.3.3 從information_schema.Routines表中查看存儲過程和函數的信息 210
8.4 修改存儲過程和函數 211
8.5 刪除存儲過程和函數 212
8.6 全局變量的持久化 213
第9章 視圖 214
9.1 視圖概述 214
9.1.1 視圖的含義 214
9.1.2 視圖的作用 215
9.2 創建視圖 215
9.2.1 創建視圖的語法形式 216
9.2.2 在單表上創建視圖 216
9.2.3 在多表上創建視圖 217
9.3 查看視圖 218
9.3.1 使用DESCRIBE語句查看視圖基本信息 218
9.3.2 使用SHOW TABLE STATUS語句查看視圖基本信息 218
9.3.3 使用SHOW CREATE VIEW語句查看視圖詳細信息 219
9.3.4 在views表中查看視圖詳細信息 220
9.4 修改視圖 221
9.4.1 使用CREATE OR REPLACE VIEW語句修改視圖 221
9.4.2 使用ALTER語句修改視圖 222
9.5 更新視圖 222
9.6 刪除視圖 225
第10章 MySQL觸發器 226
10.1 創建觸發器 226
10.1.1 創建只有一個執行語句的觸發器 226
10.1.2 創建有多個執行語句的觸發器 227
10.2 查看觸發器 229
10.2.1 利用SHOW TRIGGERS語句查看觸發器信息 229
10.2.2 在triggers表中查看觸發器信息 231
10.3 觸發器的使用 232
10.4 刪除觸發器 233
第11章 存儲引擎的選擇 234
11.1 MySQL的架構 234
11.1.1 MySQL物理文件的組成 235
11.1.2 MySQL各邏輯塊簡介 237
11.1.3 MySQL各邏輯塊協調工作 239
11.2 MySQL存儲引擎簡介 240
11.3 更改數據表的存儲引擎 242
11.4 各種存儲引擎的特性 242
11.4.1 MyISAM 243
11.4.2 InnoDB存儲引擎 245
11.4.3 MEMORY 247
11.4.4 MERGE 248
11.5 選擇合適的存儲引擎 250
第12章 MySQL分區和事務控制 252
12.1 合並表 252
12.2 分區表 254
12.2.1 認識分區表 254
12.2.2 RANGE分區 254
12.2.3 LIST分區 256
12.2.4 HASH分區 257
12.2.5 線性HASH分區 257
12.2.6 KEY分區 258
12.2.7 復合分區 259
12.3 事務控制 261
12.4 MySQL分佈式事務 264
12.4.1 分佈式事務的原理 264
12.4.2 分佈式事務的語法 265
第13章 MySQL性能優化 267
13.1 優化簡介 267
13.2 優化查詢 268
13.2.1 分析查詢語句 268
13.2.2 索引對查詢速度的影響 271
13.2.3 使用索引查詢 272
13.2.4 優化子查詢 274
13.3 優化數據庫結構 274
13.3.1 將字段很多的表分解成多個表 274
13.3.2 增加中間表 276
13.3.3 增加冗餘字段 277
13.3.4 優化插入記錄的速度 277
13.3.5 分析表、檢查表和優化表 279
13.4 臨時表性能優化 281
13.5 創建全局通用表空間 282
13.6 隱藏和顯示索引 283
第14章 MySQL的鎖定機制 285
14.1 認識MySQL的鎖定機制 285
14.2 MyISAM的鎖定機制 289
14.2.1 MyISAM表級鎖的鎖模式 289
14.2.2 獲取MyISAM表級鎖的爭用情況 291
14.2.3 MyISAM表級鎖加鎖方法 292
14.2.4 MyISAM Concurrent Insert的特性 294
14.2.5 MyISAM表鎖優化建議 295
14.3 InnoDB的鎖定機制 296
14.3.1 InnoDB行級鎖模式 296
14.3.2 獲取InnoDB行級鎖的爭用情況 300
14.3.3 InnoDB行級鎖的實現方法 304
14.3.4 間隙鎖(Net-Key鎖) 307
14.3.5 InnoDB在不同隔離級別下加鎖的差異 309
14.3.6 InnoDB 存儲引擎中的死鎖 309
14.3.7 InnoDB行級鎖優化建議 311
14.4 跳過鎖等待 311
第15章 MySQL服務器性能優化 313
15.1 優化MySQL服務器簡介 313
15.1.1 優化服務器硬件 313
15.1.2 優化MySQL的參數 314
15.2 影響MySQL性能的重要參數 315
15.2.1 查看性能參數的方法 315
15.2.2 key_buffer_size的設置 319
15.2.3 內存參數的設置 321
15.2.4 日誌和事務參數的設置 322
15.2.5 存儲和I/O相關參數的設置 324
15.2.6 其他重要參數的設置 325
15.3 MySQL日誌設置優化 326
15.4 MySQL I/O設置優化 328
15.5 MySQL並發設置優化 330
15.6 服務器語句超時處理 331
15.7 線程和臨時表的優化 331
15.7.1 線程的優化 331
15.7.2 臨時表的優化 332
15.8 增加資源組 333
第16章 MySQL性能監控 335
16.1 基本監控系統方法 335
16.1.1 ps命令 335
16.1.2 top命令 336
16.1.3 vmstat命令 338
16.1.4 mytop命令 339
16.1.5 sysstat工具 341
16.2 開源監控利器Nagios實戰 345
16.2.1 安裝Nagios之前的準備工作 346
16.2.2 安裝Nagios主程序 347
16.2.3 整合Nagios到Apache服務 348
16.2.4 安裝Nagios插件包 351
16.2.5 監控服務器的CPU、負載、磁盤I/O使用情況 352
16.2.6 配置Nagios監控MySQL服務器 356
16.3 MySQL監控利器Cacti實戰 359
16.3.1 Cacti工具的安裝 359
16.3.2 Cacti監控MySQL服務器 363
第17章 數據備份與恢復 368
17.1 數據備份 368
17.1.1 使用mysqldump命令備份 368
17.1.2 直接復制整個數據庫目錄 373
17.1.3 使用mysqlhotcopy工具快速備份 374
17.2 數據恢復 374
17.2.1 使用MySQL命令恢復 374
17.2.2 直接復制到數據庫目錄 375
17.2.3 mysqlhotcopy快速恢復 375
17.3 數據庫遷移 376
17.3.1 相同版本的MySQL數據庫之間的遷移 376
17.3.2 不同版本的MySQL數據庫之間的遷移 376
17.3.3 不同數據庫之間的遷移 377
17.4 表的導出和導入 377
17.4.1 使用SELECT…INTO OUTFILE導出文本文件 377
17.4.2 使用mysqldump命令導出文本文件 381
17.4.3 使用MySQL命令導出文本文件 383
17.4.4 使用LOAD DATA INFILE方式導入文本文件 386
17.4.5 使用mysqlimport命令導入文本文件 388
第18章 MySQL日誌 390
18.1 日誌簡介 390
18.2 二進制日誌 391
18.2.1 啟動和設置二進制日誌 391
18.2.2 查看二進制日誌 392
18.2.3 刪除二進制日誌 393
18.2.4 使用二進制日誌恢復數據庫 395
18.2.5 暫時停止二進制日誌功能 395
18.3 錯誤日誌 396
18.3.1 啟動和設置錯誤日誌 396
18.3.2 查看錯誤日誌 396
18.3.3 刪除錯誤日誌 397
18.4 通用查詢日誌 398
18.4.1 啟動通用查詢日誌 398
18.4.2 查看通用查詢日誌 398
18.4.3 刪除通用查詢日誌 399
18.5 慢查詢日誌 399
18.5.1 啟動和設置慢查詢日誌 399
18.5.2 查看慢查詢日誌 400
18.5.3 刪除慢查詢日誌 400
第19章 MySQL權限與安全管理 401
19.1 權限表 401
19.1.1 user表 401
19.1.2 db表 403
19.1.3 tables_priv表和columns_priv表 405
19.1.4 procs_priv表 405
19.2 賬戶管理 406
19.2.1 登錄和退出MySQL服務器 406
19.2.2 新建普通用戶 407
19.2.3 刪除普通用戶 409
19.2.4 root用戶修改普通用戶密碼 411
19.3 權限管理 412
19.3.1 MySQL的各種權限 412
19.3.2 授權 414
19.3.3 收回權限 415
19.3.4 查看權限 416
19.4 訪問控制 417
19.4.1 連接核實階段 417
19.4.2 請求核實階段 417
19.5 提升安全性 418
19.5.1 密碼到期更換策略 418
19.5.2 安全模式安裝 420
19.6 管理角色 420
第20章 MySQL高可用架構 422
20.1 MySQL高可用簡介 422
20.2 MySQL主從復制架構 423
20.2.1 MySQL主從架構設計 423
20.2.2 配置環境 423
20.2.3 服務器的安裝配置 424
20.2.4 LVS的安裝配置 426
20.3 MySQL+DRBD+HA主備架構 428
20.3.1 什麽是DRBD 428
20.3.2 MySQL+DRBD+HA架構設計 428
20.3.3 配置環境 429
20.3.4 安裝配置Heartbeat 429
20.3.5 安裝配置DRBD 431
20.4 LVS+Keepalived+MySQL單點寫入主主同步架構 433
20.4.1 配置環境 434
20.4.2 LVS+Keepalived的安裝 438
20.4.3 LVS+Keepalived的配置 439
20.4.4 Master和Backup的啟動 441
20.5 MMM高可用架構 442
20.5.1 MMM高可用架構簡介 442
20.5.2 配置環境 442
20.5.3 MMM的安裝 445
20.5.4 Monitor服務器的配置 446
20.5.5 各個數據庫服務器的配置 447
20.5.6 MMM的管理 447
第21章 MySQL復制 449
21.1 MySQL復制概述 449
21.2 Windows環境下的MySQL主從復制 450
21.2.1 復制前的準備工作 450
21.2.2 Windows環境下實現主從復制 450
21.2.3 Windows環境下主從復制測試 456
21.3 Linux環境下的MySQL復制 457
21.3.1 下載並安裝MySQL 8.0 458
21.3.2 單機主從復制前的準備工作 459
21.3.3 mysqld_multi實現單機主從復制 462
21.3.4 不同服務器之間實現主從復制 468
21.3.5 MySQL主從復制啟動選項 470
21.3.6 指定復制的數據庫或者表 471
21.4 查看從服務器的復制進度 477
21.5 復制環境的監控和維護 478
21.5.1 瞭解服務器的狀態 478
21.5.2 服務器復制出錯的原因 479
21.6 切換主從服務器 482
21.7 多源復制的改進 485
第22章 MySQL Utilities 488
22.1 MySQL Utilities概述 488
22.2 安裝與配置 488
22.2.1 下載與安裝MySQL Utilities 489
22.2.2 MySQL Utilities連接數據庫 490
22.3 管理與維護 491
22.3.1 使用mysqldbcompare比較數據 491
22.3.2 使用mysqldbcopy復制數據 492
22.3.3 使用mysqldbexport導出數據 492
22.3.4 使用mysqldbimport導入數據 493
22.3.5 使用mysqldiff比較對象的定義 493
第23章 MySQL Proxy 494
23.1 概述 494
23.2 安裝與配置 495
23.2.1 下載與安裝MySQL Proxy 495
23.2.2 配置MySQL Proxy參數 496
23.3 使用MySQL Proxy實現讀寫分離 498
第24章 新聞發布系統數據庫設計 499
24.1 系統概述 499
24.2 系統功能 500
24.3 數據庫設計和實現 500
24.3.1 設計表 501
24.3.2 設計索引 505
24.3.3 設計視圖 506
24.3.4 設計觸發器 506
第25章 論壇管理系統數據庫設計 508
25.1 系統概述 508
25.2 系統功能 509
25.3 數據庫設計和實現 509
25.3.1 設計方案圖表 509
25.3.2 設計表 511
25.3.3 設計索引 514
25.3.4 設計視圖 515
25.3.5 設計觸發器 516