內容介紹 | |
開本:16開 紙張:膠版紙 包裝:平裝-膠訂 是否套裝:否 國際標準書號ISBN:9787111668985 作者:冰河 出版社:機械工業出版社 出版時間:2020年11月 
" 編輯推薦 大型互聯網公司資深架構師全面、繫統、深入地分享MySQL技術 涵蓋MySQL基礎、開發、優化、運維與架構的方方面面知識 阿裡巴巴、螞蟻金服及Dromara等知名公司與機構的5位技術專家力薦 視頻教學:提供近15小時(共84段)配套教學視頻,幫助讀者提高學習效率。 內容全面:涵蓋MySQL從基礎、開發、優化,到運維和架構等方方面面的知識點。 講解深入:從MySQL數據庫的基礎操作,到優化、運維與架構,層層深入。 實用性強:結合大量經典示例和實戰案例展開講解,帶領讀者動手實踐。 內容簡介 《MySQL技術大全:開發、優化與運維實戰(視頻教學版)》結合大量示例和實戰案例,全面、繫統、深入地介紹了MySQL數據庫技術,重點闡述了MySQL開發、優化和運維過程中的各個技術點。《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技術大全:開發、優化與運維實戰(視頻教學版)》結合大量示例和實戰案例,全面、繫統、深入地介紹了MySQL數據庫技術,重點闡述了MySQL開發、優化和運維過程中的各個技術點。《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技術大全:開發、優化與運維實戰(視頻教學版)》適合想全面學習MySQL的數據庫管理人員、開發人員、運維工程師和架構師閱讀,也適合各大院校的學生及相關培訓機構的學員閱讀。另外,《MySQL技術大全:開發、優化與運維實戰(視頻教學版)》還非常適合作為一本案頭手冊供相關技術人員隨查隨用。 作者簡介 冰河 大數據架構師,編程專家,Mykit繫列開源框架作者,基於終消息可靠性的開源分布式事務框架mykit-transaction-message的作者。長期致力於分布式繫統架構、微服務架構、分布式數據庫、分布式事務與大數據技術的研究,並主導過眾多相關項目的架構設計、研發和實施落地。在高並發、高可用、高可擴展、高可維護和大數據等技術領域有豐富的實戰經驗。對Hadoop、Storm、Spark和Flink等大數據框架的源碼做過深度分析。目前致力於雲原生技術的研究。運營“冰河技術”公眾號,著有《海量數據處理與大數據技術實戰》。 目錄 前言 第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篇 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讀寫分離 6
| | |