MySQL 9從入門到性能優化
王英英
相關主題
商品描述
目錄大綱
目 錄
第1章 MySQL的安裝與配置 1
1.1 什麽是MySQL 1
1.1.1 客戶端/服務器軟件 1
1.1.2 MySQL版本 2
1.2 Windows平臺下安裝與配置MySQL 2
1.2.1 安裝MySQL 2
1.2.2 配置MySQL 6
1.3 啟動服務並登錄MySQL數據庫 11
1.3.1 啟動MySQL服務 11
1.3.2 登錄MySQL數據庫 12
1.3.3 配置Path變量 13
1.4 MySQL常用的圖形化管理工具 15
1.5 Linux平臺下安裝與配置MySQL 16
1.5.1 Linux操作系統下的MySQL版本介紹 16
1.5.2 安裝和配置MySQL的RPM包 17
第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 使用非空約束 25
2.3.5 使用唯一性約束 25
2.3.6 使用默認約束 26
2.3.7 設置表的屬性值自動增加 26
2.4 查看數據表結構 27
2.4.1 查看表基本結構的語句DESCRIBE 27
2.4.2 查看表詳細結構的語句SHOW CREATE TABLE 28
2.5 修改數據表 29
2.5.1 修改表名 29
2.5.2 修改字段的數據類型 30
2.5.3 修改字段名 31
2.5.4 添加字段 32
2.5.5 刪除字段 34
2.5.6 修改字段的排列位置 35
2.5.7 刪除表的外鍵約束 36
2.6 刪除數據表 37
2.6.1 刪除沒有被關聯的表 37
2.6.2 刪除被其他表關聯的主表 38
第3章 數據類型和運算符 40
3.1 MySQL的數據類型 40
3.1.1 整數類型 40
3.1.2 小數類型 41
3.1.3 日期與時間類型 43
3.1.4 文本字符串類型 53
3.1.5 二進制字符串類型 58
3.2 如何選擇數據類型 60
3.3 運算符 62
3.3.1 運算符概述 62
3.3.2 算術運算符 63
3.3.3 比較運算符 64
3.3.4 邏輯運算符 71
3.3.5 位運算符 73
3.3.6 運算符的優先級 76
第4章 MySQL函數 77
4.1 MySQL函數簡介 77
4.2 數學函數 77
4.2.1 絕對值函數ABS(x)和返回圓周率的函數PI() 77
4.2.2 平方根函數SQRT(x)和求餘函數MOD(x,y) 78
4.2.3 獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x) 79
4.2.4 獲取隨機數的函數RAND()和RAND(x) 79
4.2.5 函數ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 80
4.2.6 符號函數SIGN(x) 81
4.2.7 冪運算函數POW(x,y)、POWER(x,y)和EXP(x) 81
4.2.8 對數運算函數LOG(x)和LOG10(x) 82
4.2.9 角度與弧度相互轉換的函數RADIANS(x)和DEGREES(x) 82
4.2.10 正弦函數SIN(x)和反正弦函數ASIN(x) 83
4.2.11 餘弦函數COS(x)和反餘弦函數ACOS(x) 83
4.2.12 正切函數、反正切函數和餘切函數 84
4.3 字符串函數 85
4.3.1 計算字符串的字符數的函數和計算字符串長度的函數 85
4.3.2 合並字符串函數CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...) 85
4.3.3 替換字符串的函數INSERT(s1,x,len,s2) 86
4.3.4 字母大小寫轉換函數 87
4.3.5 獲取指定長度的字符串的函數LEFT(s,n)和RIGHT(s,n) 87
4.3.6 填充字符串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2) 88
4.3.7 刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s) 88
4.3.8 刪除指定字符串的函數TRIM(s1 FROM s) 89
4.3.9 重復生成字符串的函數REPEAT(s,n) 90
4.3.10 空格函數SPACE(n)和替換函數REPLACE(s,s1,s2) 90
4.3.11 比較字符串大小的函數STRCMP(s1,s2) 91
4.3.12 獲取子串的函數SUBSTRING(s,n,len)和MID(s,n,len) 91
4.3.13 匹配子字符串開始位置的函數 92
4.3.14 字符串逆序的函數REVERSE(s) 92
4.3.15 返回指定位置的字符串的函數 92
4.3.16 返回指定字符串位置的函數FIELD(s,s1,s2,...,sn) 93
4.3.17 返回子字符串位置的函數FIND_IN_SET(s1,s2) 93
4.3.18 選取字符串的函數MAKE_SET(x,s1,s2,...,sn) 94
4.4 日期和時間函數 94
4.4.1 獲取當前日期的函數和獲取當前時間的函數 94
4.4.2 獲取當前日期和時間的函數 95
4.4.3 UNIX時間戳函數 95
4.4.4 返回UTC日期的函數和返回UTC時間的函數 96
4.4.5 獲取月份的函數MONTH(date)和MONTHNAME(date) 97
4.4.6 獲取星期的函數DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 97
4.4.7 獲取星期數的函數WEEK(d)和WEEKOFYEAR(d) 98
4.4.8 獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d) 99
4.4.9 獲取年份、季度、小時、分鐘和秒鐘的函數 99
4.4.10 獲取日期的指定值的函數EXTRACT(type FROM date) 100
4.4.11 時間和秒數轉換的函數 101
4.4.12 計算日期和時間的函數 101
4.4.13 將日期和時間格式化的函數 104
4.5 條件判斷函數 107
4.5.1 IF()函數 107
4.5.2 IFNULL()函數 107
4.5.3 CASE()函數 108
4.6 系統信息函數 109
4.6.1 獲取MySQL版本號、連接數和數據庫名的函數 109
4.6.2 獲取用戶名的函數 110
4.6.3 獲取字符串的字符集和排序方式的函數 111
4.6.4 獲取最後一個自動生成的ID值的函數 111
4.7 加密函數 113
4.7.1 加密函數MD5(str) 113
4.7.2 加密函數SHA(str) 113
4.7.3 加密函數SHA2
(str, hash_length) 114
4.8 其他函數 114
4.8.1 格式化函數FORMAT(x,n) 114
4.8.2 不同進制的數字進行轉換的函數 115
4.8.3 IP地址與數字相互轉換的函數 115
4.8.4 加鎖函數和解鎖函數 116
4.8.5 重復執行指定操作的函數 116
4.8.6 改變字符集的函數 117
4.8.7 改變量據類型的函數 118
4.9 窗口函數 118
第5章 查詢數據 120
5.1 基本查詢語句 120
5.2 單表查詢 122
5.2.1 查詢所有字段 122
5.2.2 查詢指定字段 123
5.2.3 查詢指定記錄 125
5.2.4 帶IN關鍵字的查詢 126
5.2.5 帶BETWEEN AND的範圍查詢 127
5.2.6 帶LIKE的字符匹配查詢 128
5.2.7 查詢空值 130
5.2.8 帶AND的多條件查詢 131
5.2.9 帶OR的多條件查詢 132
5.2.10 查詢結果不重復 133
5.2.11 對查詢結果排序 134
5.2.12 分組查詢 138
5.2.13 使用LIMIT限制查詢結果的數量 142
5.3 使用聚合函數查詢 143
5.3.1 COUNT()函數 144
5.3.2 SUM()函數 145
5.3.3 AVG()函數 145
5.3.4 MAX()函數 146
5.3.5 MIN()函數 147
5.4 連接查詢 148
5.4.1 內連接查詢 148
5.4.2 外連接查詢 151
5.4.3 復合條件連接查詢 153
5.5 子查詢 154
5.5.1 帶ANY、SOME關鍵字的子查詢 154
5.5.2 帶ALL關鍵字的子查詢 155
5.5.3 帶EXISTS關鍵字的子查詢 155
5.5.4 帶IN關鍵字的子查詢 156
5.5.5 帶比較運算符的子查詢 158
5.6 合並查詢結果 159
5.7 為表和字段取別名 162
5.7.1 為表取別名 162
5.7.2 為字段取別名 163
5.8 使用正則表達式查詢 164
5.8.1 查詢以特定字符或字符串開頭的記錄 165
5.8.2 查詢以特定字符或字符串結尾的記錄 166
5.8.3 用符號“.”來替代字符串中的任意一個字符 166
5.8.4 使用“*”和“+”來匹配多個字符 167
5.8.5 匹配指定字符串 167
5.8.6 匹配指定字符中的任意一個 168
5.8.7 匹配指定字符以外的字符 169
5.8.8 使用{n,}或者{n,m}來指定
字符串連續出現的次數 170
5.9 通用表表達式 171
第6章 插入、更新與刪除數據 175
6.1 插入數據 175
6.1.1 為表的所有字段插入數據 175
6.1.2 為表的指定字段插入數據 177
6.1.3 同時插入多條數據 178
6.1.4 將查詢結果插入表中 180
6.2 更新數據 181
6.3 刪除數據 183
6.4 為表增加計算列 185
6.5 DDL的原子化 186
第7章 索引的設計和使用 188
7.1 索引簡介 188
7.1.1 索引的含義和特點 188
7.1.2 索引的分類 189
7.1.3 索引的設計原則 190
7.2 創建索引 190
7.2.1 創建表的時候創建索引 190
7.2.2 在已經存在的表上創建索引 196
7.3 刪除索引 202
7.4 使用降序索引 204
第8章 存儲過程和存儲函數 207
8.1 創建存儲過程和存儲函數 207
8.1.1 創建存儲過程 207
8.1.2 創建存儲函數 209
8.1.3 變量的使用 210
8.1.4 定義條件和處理程序 212
8.1.5 光標的使用 214
8.1.6 流程控制的使用 216
8.2 調用存儲過程和存儲函數 220
8.2.1 調用存儲過程 220
8.2.2 調用存儲函數 221
8.3 查看存儲過程和存儲函數 221
8.3.1 使用SHOW STATUS語句查看存儲過程和存儲函數的狀態 222
8.3.2 使用SHOW CREATE語句查看存儲過程和存儲函數的定義 222
8.3.3 從information_schema.Routines
表中查看存儲過程和存儲函數的信息 223
8.4 修改存儲過程和存儲函數 224
8.5 刪除存儲過程和存儲函數 226
8.6 全局變量的持久化 226
第9章 視圖 228
9.1 視圖概述 228
9.1.1 視圖的含義 228
9.1.2 視圖的作用 229
9.2 創建視圖 229
9.2.1 創建視圖的語法形式 230
9.2.2 在單表上創建視圖 230
9.2.3 在多表上創建視圖 231
9.3 查看視圖 232
9.3.1 使用DESCRIBE語句查看視圖基本信息 232
9.3.2 使用SHOW TABLE STATUS語句查看視圖基本信息 232
9.3.3 使用SHOW CREATE VIEW語句查看視圖詳細信息 234
9.3.4 在views表中查看視圖詳細信息 234
9.4 修改視圖 235
9.4.1 使用CREATE OR REPLACE
VIEW語句修改視圖 235
9.4.2 使用ALTER語句修改視圖 236
9.5 更新視圖 237
9.6 刪除視圖 239
第10章 MySQL觸發器 241
10.1 創建觸發器 241
10.1.1 創建只有一個執行語句的觸發器 241
10.1.2 創建有多個執行語句的觸發器 242
10.2 查看觸發器 244
10.2.1 利用SHOW TRIGGERS語句查看觸發器信息 244
10.2.2 在triggers表中查看觸發器信息 246
10.3 觸發器的使用 247
10.4 刪除觸發器 248
第11章 數據備份與恢復 249
11.1 數據備份 249
11.1.1 使用mysqldump命令備份數據 249
11.1.2 直接復制整個數據庫目錄 254
11.1.3 使用MySQLhotcopy工具快速備份 255
11.2 數據恢復 255
11.2.1 使用mysql命令恢復數據 256
11.2.2 直接復制到數據庫目錄 256
11.2.3 mysqlhotcopy快速恢復 257
11.3 數據庫遷移 257
11.3.1 相同版本的MySQL數據庫之間的遷移 257
11.3.2 不同版本的MySQL數據庫之間的遷移 258
11.3.3 不同數據庫之間的遷移 258
11.4 數據的導出和導入 259
11.4.1 使用SELECT...INTO OUTFILE導出文本文件 259
11.4.2 使用mysqldump命令導出文本文件 262
11.4.3 使用mysql命令導出文本文件 265
11.4.4 使用LOAD DATA INFILE方式導入文本文件 267
11.4.5 使用mysqlimport命令導入文本文件 269
第12章 MySQL日誌 272
12.1 日誌簡介 272
12.2 二進制日誌 273
12.2.1 啟動和設置二進制日誌 273
12.2.2 查看二進制日誌 274
12.2.3 刪除二進制日誌 276
12.2.4 使用二進制日誌恢復數據庫 277
12.2.5 暫時停止二進制日誌功能 278
12.3 錯誤日誌 278
12.3.1 啟動和設置錯誤日誌 278
12.3.2 查看錯誤日誌 279
12.3.3 刪除錯誤日誌 280
12.4 通用查詢日誌 280
12.4.1 啟動通用查詢日誌 280
12.4.2 查看通用查詢日誌 281
12.4.3 刪除通用查詢日誌 281
12.5 慢查詢日誌 282
12.5.1 啟動和設置慢查詢日誌 282
12.5.2 查看慢查詢日誌 282
12.5.3 刪除慢查詢日誌 283
第13章 MySQL權限與安全管理 284
13.1 權限表 284
13.1.1 user表 284
13.1.2 db表 287
13.1.3 tables_priv表和
columns_priv表 288
13.1.4 procs_priv表 289
13.2 賬戶管理 290
13.2.1 登錄和退出MySQL服務器 290
13.2.2 新建普通用戶 291
13.2.3 刪除普通用戶 293
13.2.4 root用戶修改普通用戶密碼 294
13.3 權限管理 295
13.3.1 MySQL的各種權限 296
13.3.2 授權 298
13.3.3 收回權限 299
13.3.4 查看權限 300
13.4 訪問控制 301
13.4.1 連接核實階段 301
13.4.2 請求核實階段 301
13.5 提升安全性 302
13.5.1 密碼到期更換策略 302
13.5.2 安全模式 304
13.6 管理角色 305
第14章 MySQL性能優化 307
14.1 優化簡介 307
14.2 優化查詢 308
14.2.1 分析查詢語句 308
14.2.2 索引對查詢速度的影響 311
14.2.3 使用索引查詢 312
14.2.4 優化子查詢 315
14.3 優化數據庫結構 315
14.3.1 將字段很多的表分解成多張表 315
14.3.2 增加中間表 317
14.3.3 增加冗餘字段 318
14.3.4 優化插入記錄的速度 318
14.3.5 分析表、檢查表和優化表 320
14.4 優化臨時表性能 322
14.5 創建全局通用表空間 324
第15章 MySQL服務器性能優化 325
15.1 優化MySQL服務器 325
15.1.1 優化服務器硬件 325
15.1.2 優化MySQL的參數 326
15.2 影響MySQL服務器性能的重要參數 327
15.2.1 查看性能參數的方法 327
15.2.2 key_buffer_size的設置 331
15.2.3 內存參數的設置 334
15.2.4 日誌和事務參數的設置 335
15.2.5 存儲和I/O相關參數的設置 337
15.2.6 其他重要參數的設置 338
15.3 MySQL日誌設置優化 339
15.4 MySQL I/O設置優化 341
15.5 MySQL並發設置優化 343
15.6 服務器語句超時處理 344
15.7 線程和臨時表的優化 344
15.7.1 線程的優化 344
15.7.2 臨時表的優化 345
15.8 增加資源組 346
第16章 MySQL性能監控 348
16.1 監控系統的基本方法 348
16.1.1 ps命令 348
16.1.2 top命令 349
16.1.3 vmstat命令 351
16.1.4 mytop命令 352
16.1.5 sysstat工具 354
16.2 開源監控利器Nagios實戰 359
16.2.1 安裝Nagios之前的準備工作 359
16.2.2 安裝Nagios主程序 361
16.2.3 整合Nagios到Apache服務 362
16.2.4 安裝Nagios插件包 365
16.2.5 監控服務器的CPU、負載、磁盤I/O使用情況 367
16.2.6 配置Nagios監控MySQL服務器 371
16.3 MySQL監控利器Cacti實戰 373
16.3.1 Cacti工具的安裝 373
16.3.2 Cacti監控MySQL服務器 378
第17章 提升MySQL數據庫的性能 384
17.1 默認字符集改為utf8mb4 384
17.2 自增變量的持久化 385
17.3 GROUP BY不再隱式排序 387
17.4 統計直方圖 389
17.4.1 直方圖的優點 389
17.4.2 直方圖的基本操作 390
17.5 日誌分類更詳細 391
17.6 支持不可見索引 392
17.7 支持JSON類型 393
17.8 全文索引的加強 396
17.9 動態修改InnoDB緩沖池的大小 397
17.10 表空間數據加密 399
17.11 跳過鎖等待 400
17.12 MySQL 9.0新特性1——支持
將JSON輸出保存到用戶變量 400
17.13 MySQL 9.0新特性2——支持準備語句 401
17.14 MySQL 9.0新特性3——支持
面向AI的向量存儲 402
第18章 MySQL終極優化實戰 404
18.1 選擇合適的存儲引擎 404
18.2 通過分區表提升MySQL執行效率 408
18.2.1 認識分區表 408
18.2.2 RANGE分區 408
18.2.3 LIST分區 410
18.2.4 HASH分區 411
18.2.5 線性HASH分區 411
18.2.6 KEY分區 413
18.2.7 復合分區 413
18.3 優化數據表的鎖 415
18.3.1 MyISAM表級鎖優化建議 415
18.3.2 InnoDB行級鎖優化建議 416
18.4 優化事務控制 416
第19章 企業人事管理系統數據庫設計 421
19.1 需求分析 421
19.2 系統功能結構 421
19.3 數據庫設計 422
19.3.1 數據庫實體E-R圖 422
19.3.2 數據庫表的設計 425
19.4 使用MySQL Workbench創建數據表 428
19.4.1 創建數據庫連接 428
19.4.2 創建新的數據庫 429
19.4.3 創建數據表 430
第20章 在線購物系統數據庫設計 433
20.1 系統分析 433
20.1.1 系統總體設計 433
20.1.2 系統界面設計 433
20.2 系統主要功能 434
20.3 數據庫與數據表設計 435
20.3.1 數據庫實體E-R圖 435
20.3.2 數據庫和數據表分析 436
20.4 使用MySQL Workbench數據建模 438
20.4.1 建立E-R模型 438
20.4.2 導入E-R模型 442