MySQL技術大全:開發、優化與運維實戰:視頻教學版( 簡體 字) | |
作者:冰河 編著 | 類別:1. -> 資料庫 -> MySQL |
出版社:機械工業出版社 | 3dWoo書號: 53710 詢問書籍請說出此書號! 有庫存 NT售價: 995 元 |
出版日:11/1/2020 | |
頁數:726 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111668985 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
前言
第1篇 MySQL基礎 第1章 數據庫概述 2 1.1 數據庫的定義 2 1.1.1 數據庫 2 1.1.2 數據庫管理系統 2 1.1.3 數據表 3 1.1.4 數據類型 3 1.1.5 運算符 4 1.1.6 函數 4 1.1.7 主鍵 4 1.1.8 外鍵 4 1.1.9 索引 6 1.1.10 視圖 6 1.1.11 存儲過程 6 1.1.12 觸發器 6 1.1.13 存儲引擎 7 1.2 數據庫的發展 7 1.2.1 人工管理階段 7 1.2.2 文件系統階段 7 1.2.3 數據庫系統階段 8 1.2.4 云數據庫階段 8 1.3 本章總結 8 第2章 數據庫技術 9 2.1 數據庫系統 9 2.2 SQL語言 11 2.2.1 SQL語言分類 11 2.2.2 ER圖 12 2.2.3 SQL執行流程 14 2.3 數據庫訪問技術 15 2.4 本章總結 16 第3章 MySQL數據庫 17 3.1 MySQL三大范式 17 3.1.1 第一范式 17 3.1.2 第二范式 18 3.1.3 第三范式 19 3.1.4 反范式化 19 3.2 MySQL存儲引擎 20 3.2.1 查看MySQL中的存儲引擎 20 3.2.2 常用存儲引擎介紹 21 3.3 本章總結 23 第2篇 環境搭建 第4章 安裝三大操作系統 26 4.1 安裝VMware虛擬機 26 4.1.1 下載VMware虛擬機 26 4.1.2 安裝VMware虛擬機步驟 30 4.2 安裝Windows操作系統 31 4.2.1 下載Windows操作系統 31 4.2.2 設置VMware虛擬機 33 4.2.3 安裝Windows操作系統步驟 38 4.3 安裝Mac OS X操作系統 44 4.3.1 設置VMware虛擬機 45 4.3.2 安裝Mac OS X操作系統步驟 46 4.4 安裝CentOS操作系統 55 4.4.1 下載CentOS操作系統 55 4.4.2 設置VMware虛擬機 56 4.4.3 安裝CentOS操作系統步驟 56 4.5 本章總結 65 第5章 服務器基礎配置 66 5.1 配置CentOS 6.8服務器環境 66 5.1.1 修改主機名 66 5.1.2 配置靜態IP地址 69 5.1.3 配置主機名和IP地址的映射關系 71 5.1.4 配置防火墻規則 71 5.1.5 配置root用戶SSH免密碼登錄 73 5.2 添加mysql用戶身份 75 5.2.1 添加mysql用戶組和用戶 75 5.2.2 賦予mysql用戶目錄權限 75 5.2.3 賦予mysql用戶sudo權限 76 5.2.4 賦予mysql用戶登錄密碼 76 5.2.5 配置mysql用戶SSH免密碼登錄 76 5.3 本章總結 77 第6章 搭建MySQL環境 78 6.1 基于MSI文件安裝Windows版本的MySQL 78 6.1.1 下載MySQL的MSI安裝包 78 6.1.2 基于MSI文件安裝MySQL 80 6.1.3 配置MySQL系統環境變量 90 6.1.4 測試MySQL 92 6.2 基于ZIP文件安裝Windows版本的MySQL 92 6.2.1 下載MySQL的ZIP安裝包 92 6.2.2 基于ZIP文件安裝MySQL 94 6.2.3 配置MySQL系統環境變量 96 6.2.4 測試MySQL 97 6.3 基于DMG文件安裝Mac OS X版本的MySQL 98 6.3.1 下載MySQL的DMG安裝包 98 6.3.2 基于DMG文件安裝MySQL 100 6.3.3 配置MySQL系統環境變量 102 6.3.4 測試MySQL 104 6.4 基于GZ文件安裝Mac OS X版本的MySQL 105 6.4.1 下載MySQL的GZ安裝包 105 6.4.2 基于GZ文件安裝MySQL 105 6.4.3 配置MySQL系統環境變量 107 6.4.4 測試MySQL 107 6.5 基于RPM文件安裝CentOS版本的MySQL 109 6.5.1 刪除CentOS 6.8服務器自帶的MySQL 109 6.5.2 下載MySQL的RPM安裝包 110 6.5.3 基于RPM文件安裝MySQL 111 6.5.4 測試MySQL 113 6.6 基于源碼安裝CentOS版本的MySQL 114 6.6.1 環境準備 115 6.6.2 下載軟件包 116 6.6.3 升級gcc和cmake 117 6.6.4 編譯安裝MySQL源碼 119 6.6.5 配置MySQL 120 6.6.6 初始化并啟動MySQL服務 123 6.6.7 測試MySQL 123 6.6.8 編譯安裝MySQL的boost源碼 124 6.7 遇到的問題和解決方案 125 6.8 本章總結 126 第3篇 MySQL開發 第7章 MySQL操作數據庫 128 7.1 創建數據庫 128 7.1.1 使用CREATE DATABASE語句創建數據庫 128 7.1.2 使用CREATE DATABASE IF NOT EXISTS語句創建數據庫 129 7.2 查看數據庫 130 7.2.1 查看MySQL中存在的數據庫 130 7.2.2 查看MySQL命令行所在的數據庫 131 7.2.3 查看數據庫的創建信息 131 7.3 修改數據庫名稱 132 7.3.1 通過重命名數據表修改數據庫名稱 132 7.3.2 通過導入/導出數據修改數據庫名稱 133 7.3.3 通過創建數據表修改數據庫名稱 134 7.4 數據庫編碼 135 7.4.1 創建數據庫時指定字符編碼 135 7.4.2 修改數據庫的字符編碼 136 7.5 刪除數據庫 136 7.6 本章總結 137 第8章 MySQL操作數據表 138 8.1 創建數據表 138 8.1.1 創建空數據表 138 8.1.2 創建數據表時指定主鍵 141 8.1.3 創建數據表時指定外鍵 142 8.1.4 創建數據表時指定字段非空 144 8.1.5 創建數據表時指定默認值 144 8.1.6 創建數據表時指定主鍵默認遞增 145 8.1.7 創建數據表時指定存儲引擎 146 8.1.8 創建數據表時指定編碼 146 8.2 查看數據表結構 147 8.2.1 使用DESCRIBE/DESC語句查看表結構 147 8.2.2 使用SHOW CREATE TABLE語句查看表結構 148 8.3 修改數據表 149 8.3.1 修改數據表名稱 150 8.3.2 添加字段 150 8.3.3 添加字段時指定位置 151 8.3.4 修改字段名稱 153 8.3.5 修改字段的數據類型 154 8.3.6 修改字段的位置 154 8.3.7 刪除字段 156 8.3.8 修改已有表的存儲引擎 157 8.3.9 取消數據表的外鍵約束 158 8.4 刪除數據表 158 8.4.1 刪除沒有關聯關系的數據表 158 8.4.2 刪除有外鍵約束的主表 160 8.5 MySQL中的臨時表 160 8.5.1 創建臨時表 161 8.5.2 刪除臨時表 161 8.6 本章總結 162 第9章 MySQL數據類型 163 9.1 數值類型 163 9.1.1 整數類型 163 9.1.2 浮點數類型 168 9.1.3 定點數類型 171 9.2 日期和時間類型 173 9.2.1 YEAR類型 174 9.2.2 TIME類型 176 9.2.3 DATE類型 178 9.2.4 DATETIME類型 181 9.2.5 TIMESTAMP類型 183 9.3 文本字符串類型 186 9.3.1 文本字符串類型概述 186 9.3.2 CHAR與VARCHAR類型 187 9.3.3 TEXT類型 188 9.3.4 ENUM類型 189 9.3.5 SET類型 191 9.3.6 JSON類型 192 9.4 二進制字符串類型 193 9.4.1 二進制字符串類型概述 193 9.4.2 BIT類型 194 9.4.3 BINARY與VARBINARY類型 195 9.4.4 BLOB類型 196 9.5 本章總結 196 第10章 MySQL運算符 197 10.1 算術運算符 197 10.1.1 MySQL支持的算術運算符 197 10.1.2 算術運算符簡單示例 198 10.2 比較運算符 199 10.2.1 MySQL支持的比較運算符 199 10.2.2 比較運算符簡單示例 201 10.3 邏輯運算符 206 10.3.1 MySQL支持的邏輯運算符 206 10.3.2 邏輯運算符簡單示例 206 10.4 位運算符 208 10.4.1 MySQL支持的位運算符 208 10.4.2 位運算符簡單示例 208 10.5 運算符的優先級 210 10.6 本章總結 211 第11章 MySQL函數 212 11.1 MySQL函數簡介 212 11.2 數學函數 213 11.2.1 絕對值函數 213 11.2.2 圓周率函數 213 11.2.3 獲取整數的函數 213 11.2.4 返回列表中的最大值與最小值函數 214 11.2.5 角度與弧度互換函數 215 11.2.6 三角函數 215 11.2.7 乘方與開方函數 217 11.2.8 對數函數 218 11.2.9 隨機函數 219 11.2.10 四舍五入與數字截取函數 220 11.2.11 符號函數 221 11.2.12 數學運算函數 221 11.3 字符串函數 222 11.3.1 ASCII(S)函數 222 11.3.2 CHAR_LENGTH(S)函數 222 11.3.3 LENGTH(S)函數 223 11.3.4 CONCAT(S1,S2,…,Sn)函數 223 11.3.5 CONCAT_WS(X, S1,S2,…,Sn)函數 223 11.3.6 INSERT(oldstr, x, y, replacestr)函數 224 11.3.7 LOWER(S)函數 224 11.3.8 UPPER(S)函數 225 11.3.9 LEFT(str, x)函數 225 11.3.10 RIGHT(str, x)函數 225 11.3.11 LPAD(str, n pstr)函數 226 11.3.12 RPAD(str, n, pstr)函數 226 11.3.13 LTRIM(S)函數 226 11.3.14 RTRIM(S)函數 226 11.3.15 TRIM(S)函數 227 11.3.16 TRIM(substr FROM str)函數 227 11.3.17 REPEAT(str, x)函數 227 11.3.18 REPLACE(S,A,B)函數 227 11.3.19 STRCMP(S1, S2)函數 228 11.3.20 SUBSTR(S, X, Y)函數 228 11.3.21 MID(S, X, Y)函數 228 11.3.22 SPACE(X)函數 229 11.3.23 LOCATE(substr, str)函數 229 11.3.24 ELT(M, S1, S2, …, Sn)函數 230 11.3.25 FIELD(S,S1,S2,…,Sn)函數 230 11.3.26 FIND_IN_SET(S1, S2)函數 230 11.3.27 REVERSE(S)函數 231 11.3.28 NULLIF(value1, value2)函數 231 11.4 日期和時間函數 231 11.4.1 CURDATE()函數 232 11.4.2 CURTIME()函數 232 11.4.3 NOW()函數 232 11.4.4 UNIX_TIMESTAMP(date)函數 233 11.4.5 FROM_UNIXTIME(timestamp)函數 233 11.4.6 UTC_DATE()函數 233 11.4.7 UTC_TIME()函數 234 11.4.8 YEAR(date)函數 234 11.4.9 MONTH(date)函數 234 11.4.10 MONTHNAME(date)函數 235 11.4.11 DAY(date)函數 235 11.4.12 DAYNAME(date)函數 235 11.4.13 DAYOFWEEK(date)函數 235 11.4.14 WEEKDAY(date)函數 236 11.4.15 WEEK(date)函數 236 11.4.16 WEEKOFYEAR(date)函數 236 11.4.17 DAYOFYEAR(date)函數 237 11.4.18 DAYOFMONTH(date)函數 237 11.4.19 QUARTER(date)函數 237 11.4.20 HOUR(time)函數 237 11.4.21 MINUTE(time)函數 238 11.4.22 SECOND(time)函數 238 11.4.23 EXTRACT(type FROM date)函數 238 11.4.24 TIME_TO_SEC(time)函數 239 11.4.25 SEC_TO_TIME(seconds)函數 240 11.4.26 DATE_ADD(date, INTERVAL expr type)函數 240 11.4.27 DATE_SUB(date, INTERVAL expr type)函數 241 11.4.28 ADDTIME(time1, time2)函數 241 11.4.29 SUBTIME(time1, time2)函數 242 11.4.30 DATEDIFF(date1, date2)函數 242 11.4.31 FROM_DAYS(N)函數 242 11.4.32 LAST_DAY(date)函數 243 11.4.33 MAKEDATE(year, n)函數 243 11.4.34 MAKETIME(hour, minute, second)函數 243 11.4.35 PERIOD_ADD(time, n)函數 244 11.4.36 TO_DAYS(date)函數 244 11.4.37 DATE_FORMAT(date, format)函數 244 11.4.38 TIME_FORMAT(time, format)函數 245 11.4.39 GET_FORMAT(date_type, format_type)函數 246 11.4.40 STR_TO_DATE(str, format)函數 246 11.5 流程處理函數 247 11.5.1 IF(value, value1,value2)函數 247 11.5.2 IFNULL(value1, value2)函數 247 11.5.3 CASE WHEN THEN函數 247 11.5.4 CASE expr WHEN函數 248 11.6 加密與解密函數 248 11.6.1 PASSWORD(value)函數 249 11.6.2 MD5(value)函數 249 11.6.3 ENCODE(value, password_seed)函數 249 11.6.4 DECODE(value, password_seed)函數 249 11.7 聚合函數 250 11.7.1 COUNT(*/字段名稱)函數 250 11.7.2 MAX(字段名稱)函數 251 11.7.3 MIN(字段名稱)函數 251 11.7.4 SUM(字段名稱)函數 251 11.7.5 AVG(字段名稱)函數 251 11.8 獲取MySQL信息函數 252 11.8.1 VERSION()函數 252 11.8.2 CONNECTION_ID()函數 252 11.8.3 DATABASE()函數 252 11.8.4 USER()函數 253 11.8.5 LAST_INSERT_ID()函數 253 11.8.6 CHARSET(value)函數 254 11.8.7 COLLATION(value)函數 254 11.9 加鎖與解鎖函數 254 11.9.1 GET_LOCK(value, timeout)函數 254 11.9.2 RELEASE_LOCK(value)函數 255 11.9.3 IS_FREE_LOCK(value)函數 255 11.9.4 IS_USED_LOCK(value)函數 255 11.10 JSON函數 256 11.10.1 JSON_CONTAINS(json_doc, value)函數 256 11.10.2 JSON_SEARCH(json_doc ->> $[*].key, type, value)函數 257 11.10.3 JSON_PRETTY(json_doc)函數 257 11.10.4 JSON_DEPTH(json_doc)函數 257 11.10.5 JSON_LENGTH(json_doc[, path])函數 258 11.10.6 JSON_KEYS(json_doc[, path])函數 258 11.10.7 JSON_INSERT(json_doc, path, val[, path, val] ...)函數 258 11.10.8 JSON_REMOVE(json_doc, path[, path] ...)函數 259 11.10.9 JSON_REPLACE(json_doc, path, val[, path, val] ...)函數 259 11.10.10 JSON_SET(json_doc, path, val[, path, val] ...)函數 260 11.10.11 JSON_TYPE(json_val)函數 261 11.10.12 JSON_VALID(value)函數 261 11.11 窗口函數 261 11.11.1 序號函數 263 11.11.2 分布函數 264 11.11.3 前后函數 265 11.11.4 首尾函數 267 11.11.5 其他函數 268 11.12 MySQL的其他函數 269 11.12.1 FORMAT(value, n)函數 269 11.12.2 CONV(value, from, to)函數 269 11.12.3 INET_ATON(value)函數 270 11.12.4 INET_NTOA(value)函數 270 11.12.5 BENCHMARK(n, expr)函數 270 11.12.6 CAST(value AS type)函數 271 11.12.7 CONVERT(value USING char_code)函數 271 11.13 本章總結 272 第12章 MySQL數據變更 273 12.1 數據插入 273 12.1.1 數據插入規則 273 12.1.2 插入完整的行記錄 274 12.1.3 指定字段插入數據 275 12.1.4 一次插入多條數據記錄 276 12.1.5 將查詢結果插入另一個表中 278 12.2 數據更新 280 12.2.1 更新數據表中的所有記錄 281 12.2.2 更新表中特定的數據行 281 12.2.3 更新某個范圍內的數據 282 12.2.4 更新符合正則表達式的數據 285 12.3 數據刪除 286 12.3.1 刪除數據表中特定的數據 286 12.3.2 刪除某個范圍內的數據 286 12.3.3 刪除符合正則表達式的數據 289 12.3.4 刪除數據表中的所有數據 289 12.4 本章總結 289 第13章 MySQL數據查詢 290 13.1 數據準備 290 13.2 SELECT查詢語句 291 13.2.1 查詢表中所有字段的數據 291 13.2.2 查詢表中單個字段的數據 293 13.2.3 查詢表中指定字段的數據 294 13.2.4 使用完全限定字段名查詢數據 294 13.2.5 使用完全限定表名查詢數據 295 13.3 WHERE條件語句 296 13.3.1 WHERE語句語法格式 296 13.3.2 查詢單一的特定數據 296 13.3.3 查詢某個范圍內的數據 297 13.3.4 IN和NOT IN條件語句 297 13.3.5 BETWEEN AND條件語句 298 13.3.6 LIKE條件語句 299 13.3.7 空值條件限制語句 300 13.3.8 AND語句 302 13.3.9 OR語句 303 13.3.10 DISTINCT語句 303 13.3.11 ORDER BY語句 304 13.3.12 GROUP BY語句 306 13.3.13 HAVING語句 308 13.3.14 WITH ROLLUP語句 308 13.3.15 對數據同時進行分組與排序 308 13.3.16 LIMIT語句 309 13.4 數據聚合查詢 310 13.4.1 查詢數據的總行數 310 13.4.2 查詢某列數據的總和 311 13.4.3 查詢某列數據的最小值 312 13.4.4 查詢某列數據的最大值 312 13.4.5 查詢某列數據的平均值 313 13.5 JOIN語句 314 13.5.1 INNER JOIN語句 314 13.5.2 LEFT JOIN語句 315 13.5.3 RIGHT JOIN語句 316 13.5.4 CROSS JOIN 語句 317 13.5.5 使用復合連接條件查詢數據 317 13.6 子查詢語句 318 13.6.1 ANY子查詢 318 13.6.2 ALL子查詢 319 13.6.3 EXISTS子查詢 319 13.6.4 NOT EXISTS子查詢 320 13.6.5 IN子查詢 320 13.6.6 NOT IN子查詢 321 13.6.7 子查詢作為結果字段 321 13.7 UNION聯合語句 322 13.7.1 UNION語句 322 13.7.2 UNION ALL語句 323 13.8 使用別名查詢數據 323 13.8.1 為字段名指定別名 323 13.8.2 為表名指定別名 324 13.8.3 同時為字段名和表名指定別名 325 13.9 使用正則表達式查詢數據 325 13.10 本章總結 326 第14章 MySQL索引 327 14.1 索引簡介 327 14.1.1 MySQL遍歷表的方式 327 14.1.2 索引的優點與缺點 328 14.1.3 索引的創建原則 328 14.2 索引的使用場景 329 14.2.1 適合創建索引的場景 329 14.2.2 不適合創建索引的場景 330 14.3 創建數據表時創建索引 330 14.3.1 語法格式 330 14.3.2 創建普通索引 331 14.3.3 創建唯一索引 332 14.3.4 創建主鍵索引 333 14.3.5 創建單列索引 333 14.3.6 創建組合索引 334 14.3.7 創建全文索引 337 14.3.8 創建空間索引 338 14.4 為已有數據表添加索引 338 14.4.1 語法格式 339 14.4.2 創建普通索引 339 14.4.3 創建唯一索引 340 14.4.4 創建主鍵索引 341 14.4.5 創建單列索引 342 14.4.6 創建組合索引 343 14.4.7 創建全文索引 344 14.4.8 創建空間索引 345 14.5 刪除索引 347 14.5.1 語法格式 347 14.5.2 刪除索引方式 347 14.6 隱藏索引 348 14.6.1 隱藏索引概述 349 14.6.2 語法格式 349 14.6.3 創建測試表 349 14.6.4 索引操作 350 14.7 降序索引 355 14.7.1 降序索引概述 355 14.7.2 降序索引操作 355 14.8 函數索引 359 14.8.1 函數索引概述 359 14.8.2 函數索引操作 359 14.9 本章總結 363 第15章 MySQL視圖 364 15.1 視圖概述 364 15.1.1 視圖的概念 364 15.1.2 視圖的優點 364 15.2 創建視圖 365 15.2.1 語法格式 365 15.2.2 創建單表視圖 366 15.2.3 創建多表聯合視圖 369 15.3 查看視圖 370 15.3.1 使用SHOW TABLES語句查看視圖 370 15.3.2 使用DESCRIBE/DESC語句查看視圖 371 15.3.3 使用SHOW TABLE STATUS語句查看視圖 371 15.3.4 使用SHOW CREATE VIEW語句查看視圖 373 15.3.5 查看views數據表中的視圖信息 373 15.4 修改視圖的結構 374 15.4.1 使用CREATE OR REPLACE VIEW語句修改視圖結構 374 15.4.2 使用ALTER語句修改視圖結構 375 15.5 更新視圖的數據 376 15.5.1 直接更新視圖數據 376 15.5.2 間接更新視圖數據 379 15.6 刪除視圖 381 15.7 本章總結 382 第16章 存儲過程和函數 383 16.1 存儲過程和函數簡介 383 16.1.1 什么是存儲過程和函數 383 16.1.2 存儲過程和函數的使用場景 384 16.1.3 存儲過程和函數的優點 384 16.2 創建存儲過程和函數 386 16.2.1 創建存儲過程 386 16.2.2 創建存儲函數 388 16.3 查看存儲過程和函數 389 16.3.1 查看存儲過程和函數的創建或定義信息 389 16.3.2 查看存儲過程和函數的狀態信息 390 16.3.3 從數據庫中查看存儲過程和函數的信息 391 16.4 修改存儲過程和函數 394 16.4.1 修改存儲過程 394 16.4.2 修改存儲函數 395 16.5 調用存儲過程和函數 396 16.5.1 調用存儲過程 396 16.5.2 調用存儲函數 397 16.6 刪除存儲過程和函數 398 16.6.1 刪除存儲過程 398 16.6.2 刪除存儲函數 398 16.7 MySQL中使用變量 399 16.7.1 定義變量 399 16.7.2 變量賦值 400 16.8 MySQL中使用變量案例 401 16.8.1 在存儲過程中使用變量 401 16.8.2 在函數中使用變量 402 16.9 定義條件和處理程序 403 16.9.1 定義條件 403 16.9.2 定義處理程序 404 16.10 定義條件和處理程序案例 405 16.10.1 在存儲過程中未定義條件和處理程序 406 16.10.2 在存儲過程中定義條件和處理程序 407 16.10.3 在函數中未定義條件和處理程序 408 16.10.4 在函數中定義條件和處理程序 409 16.11 MySQL中游標的使用 410 16.11.1 聲明游標 410 16.11.2 打開游標 410 16.11.3 使用游標 411 16.11.4 關閉游標 411 16.12 MySQL中游標的使用案例 412 16.12.1 在存儲過程中使用游標 412 16.12.2 在函數中使用游標 413 16.13 MySQL中控制流程的使用 414 16.13.1 使用IF語句控制流程 414 16.13.2 使用CASE語句控制流程 415 16.13.3 使用LOOP語句控制流程 417 16.13.4 使用LEAVE語句控制流程 418 16.13.5 使用ITERATE語句控制流程 418 16.13.6 使用REPEAT語句控制流程 419 16.13.7 使用WHILE語句控制流程 420 16.14 本章總結 421 第17章 MySQL觸發器 422 17.1 創建觸發器 422 17.1.1 語法格式 422 17.1.2 創建觸發器示例 423 17.2 查看觸發器 425 17.2.1 使用SHOW TRIGGERS語句查看觸發器的信息 425 17.2.2 使用SHOW CREATE TRIGGER語句查看觸發器的信息 426 17.2.3 通過查看triggers數據表中的數據查看觸發器的信息 427 17.3 刪除觸發器 429 17.3.1 語法格式 429 17.3.2 刪除觸發器示例 429 17.4 本章小結 429 第18章 MySQL分區 430 18.1 分區介紹 430 18.1.1 不同版本MySQL的分區 430 18.1.2 分區的優勢 432 18.1.3 分區類型 433 18.2 RANGE分區 434 18.2.1 創建分區表 434 18.2.2 添加分區 437 18.2.3 刪除分區 438 18.2.4 重定義分區 440 18.3 LIST分區 442 18.3.1 創建分區表 442 18.3.2 添加分區 443 18.3.3 刪除分區 444 18.3.4 重定義分區 444 18.4 COLUMNS分區 445 18.4.1 RANGE COLUMNS分區 446 18.4.2 LIST COLUMNS分區 447 18.5 HASH分區 448 18.5.1 創建分區表 448 18.5.2 添加分區 449 18.5.3 合并分區 450 18.6 KEY分區 451 18.7 子分區 452 18.8 分區中的NULL值處理 452 18.8.1 RANGE分區中的NULL值 452 18.8.2 LIST分區中的NULL值 453 18.8.3 HASH分區與KEY分區中的NULL值 454 18.9 本章總結 455 第19章 MySQL公用表表達式和生成列 456 19.1 公用表表達式 456 19.1.1 非遞歸CTE 456 19.1.2 遞歸CTE 457 19.1.3 遞歸CTE的限制 459 19.2 生成列 461 19.2.1 創建表時指定生成列 462 19.2.2 為已有表添加生成列 463 19.2.3 修改已有的生成列 464 19.2.4 刪除生成列 464 19.3 本章總結 465 第4篇 MySQL優化 第20章 MySQL查詢優化 468 20.1 SHOW STATUS語句解析 468 20.2 EXPLAIN語句解析 469 20.3 SHOW PROFILE語句解析 477 20.3.1 分析InnoDB數據表 478 20.3.2 分析MyISAM數據表 480 20.3.3 分析MySQL源碼 481 20.4 pt-query-digest分析查詢 482 20.5 優化子查詢 483 20.6 本章總結 483 第21章 MySQL索引優化 484 21.1 索引的類型 484 21.2 使用索引的場景 485 21.2.1 全值匹配 485 21.2.2 查詢范圍 486 21.2.3 匹配最左前綴 486 21.2.4 查詢索引列 487 21.2.5 匹配字段前綴 487 21.2.6 精確與范圍匹配索引 488 21.2.7 匹配NULL值 488 21.2.8 連接查詢匹配索引 489 21.2.9 LIKE匹配索引 490 21.3 無法使用索引的場景 490 21.3.1 以通配符開始的LIKE語句 490 21.3.2 數據類型轉換 491 21.3.3 聯合索引未匹配最左列 491 21.3.4 OR語句 492 21.3.5 計算索引列 492 21.3.6 范圍條件右側的列無法使用索引 493 21.3.7 使用<>或!=操作符匹配查詢條件 493 21.3.8 匹配NOT NULL值 493 21.3.9 索引耗時 494 21.4 使用索引提示 494 21.4.1 使用索引 494 21.4.2 忽略索引 495 21.4.3 強制使用索引 495 21.5 使用生成列為JSON建立索引 496 21.6 本章總結 497 第22章 SQL語句優化 498 22.1 嵌套查詢的優化 498 22.2 OR條件語句的優化 500 22.3 ORDER BY語句的優化 501 22.4 GROUP BY語句的優化 502 22.5 分頁查詢的優化 503 22.5.1 回表查詢優化分頁 503 22.5.2 記錄數據標識優化分頁 504 22.6 插入數據的優化 505 22.6.1 MyISAM數據表插入數據的優化 505 22.6.2 InnoDB數據表插入數據的優化 506 22.7 刪除數據的優化 506 22.8 本章總結 507 第23章 數據庫優化 508 23.1 優化數據類型 508 23.1.1 使用數據類型的基本原則 508 23.1.2 優化表中的數據類型 509 23.2 刪除重復索引和冗余索引 511 23.2.1 創建測試索引 511 23.2.2 使用pt-duplicate-key-checker刪除重復索引和冗余索引 511 23.2.3 使用mysqlindexcheck刪除重復索引和冗余索引 513 23.3 反范式化設計 514 23.4 增加中間表 515 23.5 分析數據表 517 23.6 檢查數據表 518 23.7 優化數據表 518 23.8 拆分數據表 519 23.8.1 垂直拆分數據表 519 23.8.2 水平拆分數據表 520 23.9 本章總結 520 第24章 MySQL服務器優化 521 24.1 MySQL服務器硬件的優化 521 24.1.1 優化硬件配置 521 24.1.2 系統內核優化 522 24.2 MySQL配置項的優化 523 24.3 本章總結 524 第25章 應用程序優化 525 25.1 復用數據庫連接 525 25.2 減少數據訪問 526 25.3 開啟查詢緩存 527 25.4 使用外部緩存 528 25.5 使用分布式MySQL架構 529 25.6 本章總結 529 第26章 MySQL的其他優化選項 530 26.1 使用performance_schema數據庫分析MySQL 530 26.1.1 查看MySQL是否支持performance_schema 530 26.1.2 開啟或關閉performance_schema 532 26.1.3 performance_schema的簡單配置與使用 532 26.2 使用sys數據庫分析MySQL 535 26.2.1 sys數據庫概述 535 26.2.2 sys數據庫的常用查詢 535 26.3 MySQL 8.x中的資源組 538 26.3.1 開啟 CAP_SYS_NICE 538 26.3.2 創建資源組 539 26.3.3 查看資源組 540 26.3.4 綁定資源組 540 26.3.5 修改資源組 542 26.3.6 開啟與禁用資源組 542 26.3.7 刪除資源組 543 26.4 本章總結 544 第5篇 MySQL運維 第27章 MySQL命令行工具 546 27.1 查看MySQL命令 546 27.2 mysql命令 547 27.2.1 登錄MySQL終端 547 27.2.2 設置客戶端連接編碼 549 27.2.3 直接執行SQL語句 550 27.2.4 格式化輸出結果 550 27.2.5 SQL報錯處理 551 27.3 mysqladmin命令 552 27.3.1 mysqladmin命令參數 553 27.3.2 mysqladmin命令簡單示例 553 27.4 myisampack命令 554 27.5 mysqlbinlog命令 555 27.6 mysqlcheck命令 558 27.7 mysqlshow命令 559 27.8 mysqldump命令 561 27.9 mysqlimport命令 563 27.10 本章總結 564 第28章 MySQL日志 565 28.1 查詢日志 565 28.1.1 開啟查詢日志 565 28.1.2 查看查詢日志 566 28.1.3 刪除查詢日志 567 28.1.4 關閉查詢日志 568 28.2 慢查詢日志 568 28.2.1 開啟慢查詢日志 568 28.2.2 查看慢查詢日志 569 28.2.3 刪除慢查詢日志 570 28.2.4 關閉慢查詢日志 571 28.3 錯誤日志 571 28.3.1 開啟錯誤日志 571 28.3.2 查看錯誤日志 572 28.3.3 刪除錯誤日志 572 28.3.4 關閉錯誤日志 573 28.4 二進制日志 573 28.4.1 開啟二進制日志 573 28.4.2 查看二進制日志 574 28.4.3 刪除二進制日志 575 28.4.4 暫時停止與開啟二進制日志 577 28.4.5 關閉二進制日志 577 28.5 本章總結 577 第29章 數據備份與恢復 578 29.1 基于mysqldump備份并恢復數據 578 29.1.1 備份數據 578 29.1.2 恢復數據 581 29.2 基于mysqlpump備份并恢復數據 582 29.3 基于mydumper備份并恢復數據 583 29.3.1 安裝mydumper 583 29.3.2 備份數據 584 29.3.3 恢復數據 588 29.4 基于mysqlhotcopy備份并恢復數據 589 29.4.1 安裝mysqlhotcopy 589 29.4.2 備份數據 590 29.4.3 恢復數據 590 29.5 基于xtrabackup備份并恢復數據 590 29.5.1 安裝xtrabackup 590 29.5.2 備份數據 591 29.5.3 恢復準備 593 29.5.4 恢復數據 594 29.6 數據備份與恢復案例 596 29.6.1 完全恢復數據案例 596 29.6.2 基于位置點恢復數據案例 598 29.6.3 基于時間點恢復數據案例 598 29.7 MySQL災難恢復 598 29.7.1 問題重現 599 29.7.2 問題分析 599 29.7.3 問題解決 600 29.8 實現數據庫的自動備份 602 29.9 導出數據 603 29.9.1 使用SELECT INTO OUTFILE語句導出數據 603 29.9.2 使用mysqldump命令導出數據 605 29.9.3 使用mysql命令導出數據 606 29.10 導入數據 607 29.10.1 使用LOAD DATA INFILE導入數據 608 29.10.2 使用mysqlimport導入數據 609 29.11 遇到的問題和解決方案 610 29.12 本章總結 611 第30章 MySQL賬戶管理 612 30.1 MySQL中的權限表 612 30.2 創建普通用戶 613 30.2.1 使用CREATE USER語句創建用戶 613 30.2.2 使用GRANT語句創建用戶 617 30.2.3 操作user數據表創建用戶 619 30.3 為用戶授權 620 30.3.1 權限層級 620 30.3.2 使用GRANT語句為用戶授權 621 30.3.3 通過操作權限表為用戶授權 624 30.4 查看用戶權限 624 30.4.1 通過SHOW GRANTS FOR語句查看用戶權限 624 30.4.2 通過查詢mysql.user數據表查看用戶權限 625 30.4.3 通過查詢information_schema數據庫查看用戶權限 625 30.5 修改用戶權限 626 30.5.1 使用GRANT語句修改用戶權限 626 30.5.2 通過操作數據表修改用戶權限 627 30.6 撤銷用戶權限 628 30.6.1 使用REVOKE語句撤銷用戶權限 628 30.6.2 通過操作數據表撤銷用戶權限 629 30.7 修改用戶密碼 630 30.7.1 通過mysqladmin修改用戶密碼 630 30.7.2 使用SET PASSWORD語句修改用戶密碼 630 30.7.3 使用GRANT語句修改用戶密碼 631 30.7.4 通過操作user數據表修改用戶密碼 632 30.7.5 忘記root密碼的解決方案 632 30.8 刪除用戶 633 30.8.1 使用DROP USER語句刪除用戶 633 30.8.2 使用DELETE語句刪除用戶 634 30.9 限制用戶使用資源 634 30.9.1 限制用戶使用資源示例 634 30.9.2 修改用戶的資源限制 635 30.9.3 解除用戶的資源限制 635 30.10 MySQL 8.x版本中的賬戶管理 636 30.10.1 用戶創建和授權 636 30.10.2 認證插件更新 636 30.10.3 密碼管理 638 30.10.4 角色管理 640 30.11 本章總結 644 第6篇 MySQL架構 第31章 MySQL復制 646 31.1 搭建MySQL主從復制環境 646 31.1.1 服務器規劃 646 31.1.2 搭建MySQL主從環境 647 31.1.3 測試MySQL主從復制環境 650 31.2 搭建MySQL主主復制環境 652 31.2.1 服務器規劃 652 31.2.2 將MySQL主從環境切換為主主環境 652 31.2.3 直接搭建MySQL主主環境 654 31.2.4 測試MySQL主主復制環境 654 31.3 添加MySQL從庫 655 31.3.1 服務器規劃 655 31.3.2 在主從服務器上進行的操作 656 31.3.3 測試MySQL主從復制環境 658 31.4 切換主從復制到鏈式復制 659 31.4.1 服務器規劃 659 31.4.2 切換復制模式 660 31.5 切換鏈式復制到主從復制 662 31.6 搭建MySQL多源復制環境 665 31.6.1 服務器規劃 665 31.6.2 搭建MySQL多源復制環境 666 31.6.3 測試MySQL多源復制環境 667 31.7 添加復制過濾器 668 31.7.1 復制指定的數據庫 669 31.7.2 忽略指定的數據庫 669 31.7.3 復制指定的數據表 670 31.7.4 忽略指定的數據表 670 31.8 設置延遲復制 671 31.9 基于GTID搭建MySQL主從復制環境 671 31.10 基于半同步模式搭建MySQL主從復制環境 673 31.10.1 半同步參數說明 673 31.10.2 配置半同步復制 674 31.10.3 測試半同步復制 676 31.11 本章總結 677 第32章 MySQL讀寫分離 678 32.1 基于MySQL Proxy實現讀寫分離 678 32.1.1 服務器規劃 678 32.1.2 安裝Lua環境 679 32.1.3 安裝MySQL Proxy 679 32.1.4 配置MySQL Proxy讀寫分離 680 32.1.5 啟動MySQL Proxy 683 32.1.6 測試MySQL Proxy的讀寫分離 683 32.2 基于Atlas實現讀寫分離 685 32.2.1 服務器規劃 685 32.2.2 安裝Atlas 685 32.2.3 配置Atlas讀寫分離 686 32.2.4 啟動Atlas 687 32.2.5 測試Atlas讀寫分離 689 32.3 基于ProxySQL實現讀寫分離 689 32.3.1 服務器規劃 689 32.3.2 安裝ProxySQL 690 32.3.3 配置ProxySQL讀寫分離 690 32.3.4 測試ProxySQL讀寫分離 695 32.4 基于Amoeba實現讀寫分離 695 32.4.1 服務器規劃 695 32.4.2 安裝JDK 695 32.4.3 安裝Amoeba 696 32.4.4 配置Amoeba讀寫分離 697 32.4.5 啟動Amoeba 699 32.4.6 測試Amoeba讀寫分離 700 32.5 基于Mycat實現讀寫分離 700 32.5.1 服務器規劃 701 32.5.2 安裝JDK 701 32.5.3 安裝Mycat 701 32.5.4 配置Mycat讀寫分離 702 32.5.5 啟動Mycat 703 32.5.6 測試Mycat讀寫分離 704 32.6 本章總結 704 第33章 MySQL HA高可用架構 705 33.1 基于Keepalived搭建MySQL高可用環境 705 33.1.1 服務器規劃 705 33.1.2 安裝Keepalived 706 33.1.3 配置MySQL高可用 707 33.1.4 測試MySQL高可用 710 33.1.5 自動重啟MySQL 711 33.2 基于HAProxy搭建Mycat高可用環境 713 33.2.1 服務器規劃 713 33.2.2 安裝Mycat狀態檢查服務 713 33.2.3 安裝HAProxy服務 715 33.2.4 配置Mycat負載均衡 716 33.2.5 測試Mycat高可用環境 719 33.3 基于Keepalived搭建HAProxy高可用環境 721 33.3.1 服務器規劃 721 33.3.2 安裝并配置HAProxy和Keepalived 721 33.3.3 配置HAProxy高可用性 722 33.3.4 測試HAProxy高可用性 725 33.4 本章總結 726 參考文獻 727 本書結合大量示例和實戰案例,全面、系統、深入地介紹了MySQL數據庫技術,重點闡述了MySQL開發、優化和運維過程中的各個技術點。本書對學習MySQL技術有較高的參考價值,尤其是環境搭建、優化、維護和架構等內容可直接用于實際工作中。
本書共33章,分為6篇。第1篇“MySQL基礎”,介紹數據庫的定義、發展,以及數據庫技術和MySQL數據庫的三大范式與存儲引擎。第2篇“環境搭建”,介紹VMware虛擬機以及Windows、Mac OS X和CentOS操作系統的安裝,并介紹如何在三大操作系統上安裝和配置MySQL。第3篇“MySQL開發”,介紹MySQL中的數據庫操作、數據表操作、數據類型、運算符、函數、數據變更、數據查詢、索引、視圖、存儲過程、觸發器、分區、公用表表達式和生成列等。第4篇“MySQL優化”,介紹MySQL中的查詢優化、索引優化、SQL語句優化、數據庫優化、服務器優化、應用程序優化及其他優化技術。第5篇“MySQL維護”,介紹MySQL中各種命令行工具的使用,以及各種日志的開啟、查看、刪除與關閉,并介紹數據的備份與恢復及MySQL中的賬戶管理。第6篇“MySQL架構”,介紹MySQL中的復制、讀寫分離環境搭建,以及如何實現MySQL的高可用等。 本書適合想全面學習MySQL的數據庫管理人員、開發人員、運維工程師和架構師閱讀,也適合各大院校的學生及相關培訓機構的學員閱讀。另外,本書還非常適合作為一本案頭手冊供相關技術人員隨查隨用。 本書特色 視頻教學:提供近15小時(共84段)配套教學視頻,幫助讀者提高學習效率。 內容全面:涵蓋MySQL從基礎、開發、優化,到運維和架構等方方面面的知識點。 講解深入:從MySQL數據庫的基礎操作,到優化、運維與架構,層層深入。 實用性強:結合大量經典示例和實戰案例展開講解,帶領讀者動手實踐。 配套資源獲取方式 本書涉及的源代碼及案例工程文件需要讀者自行下載,請按照前言中的詳細說明進行獲取。 為何要寫這本書
MySQL具有小巧、靈活和免費等特性,這使得它越來越多地被用于企業的實際開發中。特別是MySQL數據庫的開源特性,更使它得到了廣泛應用。程序員要想進入MySQL開發領域,除了需要有扎實的編程基礎外,還需要掌握SQL語句的編寫,熟悉MySQL數據庫的優化和運維,了解MySQL數據庫的常見故障和解決方案,這樣才能在競爭日益激烈的數據庫領域提高競爭力,進而實現自身的價值。 目前,市面上介紹MySQL數據庫技術的圖書不少,但是真正從實戰出發,全面介紹MySQL基礎、環境搭建、開發、優化、運維和架構的圖書卻很少。本書結合大量的實戰案例,詳細地介紹掌握MySQL數據庫所需要的各項技能,尤其是環境搭建、MySQL優化、MySQL運維和架構等相關內容。通過閱讀本書,讀者能夠更加全面、深入、透徹地理解MySQL數據庫技術,對書中所述內容稍加修改便可直接應用于自己的工作之中,從而提高自身的MySQL開發水平和項目實戰能力。 本書特色 1.提供近15小時配套教學視頻 為了讓讀者更加高效、直觀地學習和理解本書中的重點內容和難點內容,筆者專門錄制了近15小時(共84段)的配套教學視頻輔助讀者學習,相信讀者結合教學視頻,可以取得更好的學習效果。 2.內容非常全面,涵蓋MySQL的所有重要技術點 本書非常全面地介紹了MySQL數據庫的各個知識點,涵蓋MySQL基礎知識、環境搭建、開發、優化、運維和架構等。通過閱讀本書,讀者能夠全面掌握MySQL數據庫的各項技術要點。 3.給出大量的圖解和實戰案例 本書在介紹理論知識時都配有對應的圖表,而且在知識點講解后都給出了大量的實戰案例,幫助讀者更加直觀地理解所學內容。讀者只要很好地理解各個知識點并親自動手運行每個示例的源代碼,就能夠更加深入地理解和使用MySQL。 4.案例典型,實用性強 本書中的實戰案例涉及MySQL技術的方方面面,都非常典型,而且這些案例具有很強的實用性,略加修改就可以遷移到自己的工作中,讀者只要很好地理解和掌握這些案例,就能觸類旁通,舉一反三。 5.講解通俗易懂 本書從始至終都用通俗易懂的語言進行講解,書中對每個概念都給出了清晰的定義,對每個知識點都給出了簡明扼要的講解,對每個案例都給出了清晰明了的實現步驟,而且講解時言簡意賅,這大大提升了讀者的閱讀體驗。 本書知識體系 第1篇 MySQL基礎 本篇涵蓋第1~3章,主要介紹數據庫的定義與發展,以及數據庫技術、MySQL數據庫的三大范式及存儲引擎。 第2篇 環境搭建 本篇涵蓋第4~6章,主要介紹如何安裝VMware虛擬機,如何安裝Windows、Mac OS X和CentOS操作系統,以及如何在三大操作系統上安裝和配置MySQL環境。 第3篇 MySQL開發 本篇涵蓋第7~19章,主要介紹MySQL的技術要點,包括如何操作數據庫和數據表,MySQL中的數據類型、運算符、函數、數據變更和數據查詢,MySQL中的索引、視圖、觸發器、存儲過程和函數,以及MySQL分區、公用表表達式與生成列。 第4篇 MySQL優化 本篇涵蓋第20~26章,主要介紹MySQL中的查詢優化、索引優化、SQL語句優化、數據庫優化、服務器優化、應用程序優化及其他優化技術等。 第5篇 MySQL運維 本篇涵蓋第27~30章,主要介紹MySQL中各種命令行工具的使用,各種日志的開啟、查看、刪除與關閉,數據的備份與恢復,以及MySQL中的賬戶管理等。 第6篇 MySQL架構 本篇涵蓋第31~33章,主要介紹如何實現MySQL中的復制,如何搭建MySQL的讀寫分離環境,以及如何實現MySQL的高可用性等。 配書資源獲取 本書附贈如下配書資源: * 近15小時(共84段)配套教學視頻; * 所有案例的SQL源碼文件。 這些配套資源需要讀者自行下載。請在華章公司網站上搜索到本書,然后單擊“資料下載”按鈕,即可在本書頁面上找到下載鏈接。 本書讀者對象 * 想全面學習MySQL技術的人員; * 想轉行從事數據庫開發的人員; * 數據庫管理人員; * 數據庫運維工程師; * 希望提高數據庫實戰水平的人員; * 數據庫開發經理; * 數據庫架構師; * 相關院校的學生; * 專業培訓機構的學員; * 需要時常查閱MySQL技術和開發案例的人員。 閱讀建議 * 不具備MySQL基礎知識的讀者,建議從第1章順次閱讀,并按照書中的操作步驟實現每一個案例。 * 有一定MySQL開發基礎的讀者,可以根據自身的實際情況有選擇地閱讀。 * 書中的每個案例,先自行思考如何實現,再閱讀筆者介紹的方法,可以達到事半功倍的效果。 * 先理解書中介紹的相關技術原理,再親自動手實現一遍書中的案例,理解會更加深刻。 勘誤與支持 盡管筆者對技術有近乎完美的追求,但是由于MySQL體系龐大,所涉及的知識點眾多,一本書很難講解清楚所有的知識點。如果筆者有疏漏,懇請讀者朋友能夠及時批評和指正。如果您對本書有好的建議或者想法,可以通過以下方式進行反饋。 微信公眾號:冰河技術 致謝 感謝季敏(阿里巴巴技術專家,Seata開源項目發起人)、肖宇(開源組織Dromara創始人,Soul網關與Hmily分布式事務框架作者)、劉遄(LinuxProbe網站創始人,RHCA架構師,運維專家,暢銷書《Linux就該這么學》作者)、芋艿(芋道源碼作者)和黃小邪(螞蟻金服高級開發工程師)對我寫作本書的大力支持和幫助! 感謝我的團隊成員和許多一起交流過乃至合作過的朋友們! 感謝我的CSDN博客粉絲以及那些在我博客和公眾號上留言的朋友們! 感謝我的家人,他們都以自己的方式在我寫作期間默默地給予支持與鼓勵! 感謝出版社參與本書出版的各位編輯,沒有你們的辛勤工作和一絲不茍的精神,就不會有本書的高質量出版。 感謝其他支持、鼓勵和幫助過我的人! 最后感謝本書讀者,是你們的鞭策,才讓我有動力完成寫作本書的“艱巨”任務! 冰河 |