【缺書】NT售價: 995 元
為何要寫這本書 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博客粉絲以及那些在我博客和公眾號上留言的朋友們! 感謝我的家人,他們都以自己的方式在我寫作期間默默地給予支持與鼓勵! 感謝出版社參與本書出版的各位編輯,沒有你們的辛勤工作和一絲不茍的精神,就不會有本書的高質量出版。 感謝其他支持、鼓勵和幫助過我的人! 最后感謝本書讀者,是你們的鞭策,才讓我有動力完成寫作本書的“艱巨”任務! 冰河
本書結合大量示例和實戰案例,全面、系統、深入地介紹了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數據庫的基礎操作,到優化、運維與架構,層層深入。實用性強:結合大量經典示例和實戰案例展開講解,帶領讀者動手實踐。配套資源獲取方式本書涉及的源代碼及案例工程文件需要讀者自行下載,請按照前言中的詳細說明進行獲取。
前言第1篇 MySQL基礎第1章 數據庫概述 21.1 數據庫的定義 21.1.1 數據庫 21.1.2 數據庫管理系統 21.1.3 數據表 31.1.4 數據類型 31.1.5 運算符 41.1.6 函數 41.1.7 主鍵 41.1.8 外鍵 41.1.9 索引 61.1.10 視圖 61.1.11 存儲過程 61.1.12 觸發器 61.1.13 存儲引擎 71.2 數據庫的發展 71.2.1 人工管理階段 71.2.2 文件系統階段 71.2.3 數據庫系統階段 81.2.4 云數據庫階段 81.3 本章總結 8第2章 數據庫技術 92.1 數據庫系統 92.2 SQL語言 112.2.1 SQL語言分類 112.2.2 ER圖 122.2.3 SQL執行流程 142.3 數據庫訪問技術 152.4 本章總結 16第3章 MySQL數據庫 173.1 MySQL三大范式 173.1.1 第一范式 173.1.2 第二范式 183.1.3 第三范式 193.1.4 反范式化 193.2 MySQL存儲引擎 203.2.1 查看MySQL中的存儲引擎 203.2.2 常用存儲引擎介紹 213.3 本章總結 23第2篇 環境搭建第4章 安裝三大操作系統 264.1 安裝VMware虛擬機 264.1.1 下載VMware虛擬機 264.1.2 安裝VMware虛擬機步驟 304.2 安裝Windows操作系統 314.2.1 下載Windows操作系統 314.2.2 設置VMware虛擬機 334.2.3 安裝Windows操作系統步驟 384.3 安裝Mac OS X操作系統 444.3.1 設置VMware虛擬機 454.3.2 安裝Mac OS X操作系統步驟 464.4 安裝CentOS操作系統 554.4.1 下載CentOS操作系統 554.4.2 設置VMware虛擬機 564.4.3 安裝CentOS操作系統步驟 564.5 本章總結 65第5章 服務器基礎配置 665.1 配置CentOS 6.8服務器環境 665.1.1 修改主機名 665.1.2 配置靜態IP地址 695.1.3 配置主機名和IP地址的映射關系 715.1.4 配置防火墻規則 715.1.5 配置root用戶SSH免密碼登錄 735.2 添加mysql用戶身份 755.2.1 添加mysql用戶組和用戶 755.2.2 賦予mysql用戶目錄權限 755.2.3 賦予mysql用戶sudo權限 765.2.4 賦予mysql用戶登錄密碼 765.2.5 配置mysql用戶SSH免密碼登錄 765.3 本章總結 77第6章 搭建MySQL環境 786.1 基于MSI文件安裝Windows版本的MySQL 786.1.1 下載MySQL的MSI安裝包 786.1.2 基于MSI文件安裝MySQL 806.1.3 配置MySQL系統環境變量 906.1.4 測試MySQL 926.2 基于ZIP文件安裝Windows版本的MySQL 926.2.1 下載MySQL的ZIP安裝包 926.2.2 基于ZIP文件安裝MySQL 946.2.3 配置MySQL系統環境變量 966.2.4 測試MySQL 976.3 基于DMG文件安裝Mac OS X版本的MySQL 986.3.1 下載MySQL的DMG安裝包 986.3.2 基于DMG文件安裝MySQL 1006.3.3 配置MySQL系統環境變量 1026.3.4 測試MySQL 1046.4 基于GZ文件安裝Mac OS X版本的MySQL 1056.4.1 下載MySQL的GZ安裝包 1056.4.2 基于GZ文件安裝MySQL 1056.4.3 配置MySQL系統環境變量 1076.4.4 測試MySQL 1076.5 基于RPM文件安裝CentOS版本的MySQL 1096.5.1 刪除CentOS 6.8服務器自帶的MySQL 1096.5.2 下載MySQL的RPM安裝包 1106.5.3 基于RPM文件安裝MySQL 1116.5.4 測試MySQL 1136.6 基于源碼安裝CentOS版本的MySQL 1146.6.1 環境準備 1156.6.2 下載軟件包 1166.6.3 升級gcc和cmake 1176.6.4 編譯安裝MySQL源碼 1196.6.5 配置MySQL 1206.6.6 初始化并啟動MySQL服務 1236.6.7 測試MySQL 1236.6.8 編譯安裝MySQL的boost源碼 1246.7 遇到的問題和解決方案 1256.8 本章總結 126第3篇 MySQL開發第7章 MySQL操作數據庫 1287.1 創建數據庫 1287.1.1 使用CREATE DATABASE語句創建數據庫 1287.1.2 使用CREATE DATABASE IF NOT EXISTS語句創建數據庫 1297.2 查看數據庫 1307.2.1 查看MySQL中存在的數據庫 1307.2.2 查看MySQL命令行所在的數據庫 1317.2.3 查看數據庫的創建信息 1317.3 修改數據庫名稱 1327.3.1 通過重命名數據表修改數據庫名稱 1327.3.2 通過導入/導出數據修改數據庫名稱 1337.3.3 通過創建數據表修改數據庫名稱 1347.4 數據庫編碼 1357.4.1 創建數據庫時指定字符編碼 1357.4.2 修改數據庫的字符編碼 1367.5 刪除數據庫 1367.6 本章總結 137第8章 MySQL操作數據表 1388.1 創建數據表 1388.1.1 創建空數據表 1388.1.2 創建數據表時指定主鍵 1418.1.3 創建數據表時指定外鍵 1428.1.4 創建數據表時指定字段非空 1448.1.5 創建數據表時指定默認值 1448.1.6 創建數據表時指定主鍵默認遞增 1458.1.7 創建數據表時指定存儲引擎 1468.1.8 創建數據表時指定編碼 1468.2 查看數據表結構 1478.2.1 使用DESCRIBE/DESC語句查看表結構 1478.2.2 使用SHOW CREATE TABLE語句查看表結構 1488.3 修改數據表 1498.3.1 修改數據表名稱 1508.3.2 添加字段 1508.3.3 添加字段時指定位置 1518.3.4 修改字段名稱 1538.3.5 修改字段的數據類型 1548.3.6 修改字段的位置 1548.3.7 刪除字段 1568.3.8 修改已有表的存儲引擎 1578.3.9 取消數據表的外鍵約束 1588.4 刪除數據表 1588.4.1 刪除沒有關聯關系的數據表 1588.4.2 刪除有外鍵約束的主表 1608.5 MySQL中的臨時表 1608.5.1 創建臨時表 1618.5.2 刪除臨時表 1618.6 本章總結 162第9章 MySQL數據類型 1639.1 數值類型 1639.1.1 整數類型 1639.1.2 浮點數類型 1689.1.3 定點數類型 1719.2 日期和時間類型 1739.2.1 YEAR類型 1749.2.2 TIME類型 1769.2.3 DATE類型 1789.2.4 DATETIME類型 1819.2.5 TIMESTAMP類型 1839.3 文本字符串類型 1869.3.1 文本字符串類型概述 1869.3.2 CHAR與VARCHAR類型 1879.3.3 TEXT類型 1889.3.4 ENUM類型 1899.3.5 SET類型 1919.3.6 JSON類型 1929.4 二進制字符串類型 1939.4.1 二進制字符串類型概述 1939.4.2 BIT類型 1949.4.3 BINARY與VARBINARY類型 1959.4.4 BLOB類型 1969.5 本章總結 196第10章 MySQL運算符 19710.1 算術運算符 19710.1.1 MySQL支持的算術運算符 19710.1.2 算術運算符簡單示例 19810.2 比較運算符 19910.2.1 MySQL支持的比較運算符 19910.2.2 比較運算符簡單示例 20110.3 邏輯運算符 20610.3.1 MySQL支持的邏輯運算符 20610.3.2 邏輯運算符簡單示例 20610.4 位運算符 20810.4.1 MySQL支持的位運算符 20810.4.2 位運算符簡單示例 20810.5 運算符的優先級 21010.6 本章總結 211第11章 MySQL函數 21211.1 MySQL函數簡介 21211.2 數學函數 21311.2.1 絕對值函數 21311.2.2 圓周率函數 21311.2.3 獲取整數的函數 21311.2.4 返回列表中的最大值與最小值函數 21411.2.5 角度與弧度互換函數 21511.2.6 三角函數 21511.2.7 乘方與開方函數 21711.2.8 對數函數 21811.2.9 隨機函數 21911.2.10 四舍五入與數字截取函數 22011.2.11 符號函數 22111.2.12 數學運算函數 22111.3 字符串函數 22211.3.1 ASCII(S)函數 22211.3.2 CHAR_LENGTH(S)函數 22211.3.3 LENGTH(S)函數 22311.3.4 CONCAT(S1,S2,…,Sn)函數 22311.3.5 CONCAT_WS(X, S1,S2,…,Sn)函數 22311.3.6 INSERT(oldstr, x, y, replacestr)函數 22411.3.7 LOWER(S)函數 22411.3.8 UPPER(S)函數 22511.3.9 LEFT(str, x)函數 22511.3.10 RIGHT(str, x)函數 22511.3.11 LPAD(str, n pstr)函數 22611.3.12 RPAD(str, n, pstr)函數 22611.3.13 LTRIM(S)函數 22611.3.14 RTRIM(S)函數 22611.3.15 TRIM(S)函數 22711.3.16 TRIM(substr FROM str)函數 22711.3.17 REPEAT(str, x)函數 22711.3.18 REPLACE(S,A,B)函數 22711.3.19 STRCMP(S1, S2)函數 22811.3.20 SUBSTR(S, X, Y)函數 22811.3.21 MID(S, X, Y)函數 22811.3.22 SPACE(X)函數 22911.3.23 LOCATE(substr, str)函數 22911.3.24 ELT(M, S1, S2, …, Sn)函數 23011.3.25 FIELD(S,S1,S2,…,Sn)函數 23011.3.26 FIND_IN_SET(S1, S2)函數 23011.3.27 REVERSE(S)函數 23111.3.28 NULLIF(value1, value2)函數 23111.4 日期和時間函數 23111.4.1 CURDATE()函數 23211.4.2 CURTIME()函數 23211.4.3 NOW()函數 23211.4.4 UNIX_TIMESTAMP(date)函數 23311.4.5 FROM_UNIXTIME(timestamp)函數 23311.4.6 UTC_DATE()函數 23311.4.7 UTC_TIME()函數 23411.4.8 YEAR(date)函數 23411.4.9 MONTH(date)函數 23411.4.10 MONTHNAME(date)函數 23511.4.11 DAY(date)函數 23511.4.12 DAYNAME(date)函數 23511.4.13 DAYOFWEEK(date)函數 23511.4.14 WEEKDAY(date)函數 23611.4.15 WEEK(date)函數 23611.4.16 WEEKOFYEAR(date)函數 23611.4.17 DAYOFYEAR(date)函數 23711.4.18 DAYOFMONTH(date)函數 23711.4.19 QUARTER(date)函數 23711.4.20 HOUR(time)函數 23711.4.21 MINUTE(time)函數 23811.4.22 SECOND(time)函數 23811.4.23 EXTRACT(type FROM date)函數 23811.4.24 TIME_TO_SEC(time)函數 23911.4.25 SEC_TO_TIME(seconds)函數 24011.4.26 DATE_ADD(date, INTERVAL expr type)函數 24011.4.27 DATE_SUB(date, INTERVAL expr type)函數 24111.4.28 ADDTIME(time1, time2)函數 24111.4.29 SUBTIME(time1, time2)函數 24211.4.30 DATEDIFF(date1, date2)函數 24211.4.31 FROM_DAYS(N)函數 24211.4.32 LAST_DAY(date)函數 24311.4.33 MAKEDATE(year, n)函數 24311.4.34 MAKETIME(hour, minute, second)函數 24311.4.35 PERIOD_ADD(time, n)函數 24411.4.36 TO_DAYS(date)函數 24411.4.37 DATE_FORMAT(date, format)函數 24411.4.38 TIME_FORMAT(time, format)函數 24511.4.39 GET_FORMAT(date_type, format_type)函數 24611.4.40 STR_TO_DATE(str, format)函數 24611.5 流程處理函數 24711.5.1 IF(value, value1,value2)函數 24711.5.2 IFNULL(value1, value2)函數 24711.5.3 CASE WHEN THEN函數 24711.5.4 CASE expr WHEN函數 24811.6 加密與解密函數 24811.6.1 PASSWORD(value)函數 24911.6.2 MD5(value)函數 24911.6.3 ENCODE(value, password_seed)函數 24911.6.4 DECODE(value, password_seed)函數 24911.7 聚合函數 25011.7.1 COUNT(*/字段名稱)函數 25011.7.2 MAX(字段名稱)函數 25111.7.3 MIN(字段名稱)函數 25111.7.4 SUM(字段名稱)函數 25111.7.5 AVG(字段名稱)函數 25111.8 獲取MySQL信息函數 25211.8.1 VERSION()函數 25211.8.2 CONNECTION_ID()函數 25211.8.3 DATABASE()函數 25211.8.4 USER()函數 25311.8.5 LAST_INSERT_ID()函數 25311.8.6 CHARSET(value)函數 25411.8.7 COLLATION(value)函數 25411.9 加鎖與解鎖函數 25411.9.1 GET_LOCK(value, timeout)函數 25411.9.2 RELEASE_LOCK(value)函數 25511.9.3 IS_FREE_LOCK(value)函數 25511.9.4 IS_USED_LOCK(value)函數 25511.10 JSON函數 25611.10.1 JSON_CONTAINS(json_doc, value)函數 25611.10.2 JSON_SEARCH(json_doc ->> $[*].key, type, value)函數 25711.10.3 JSON_PRETTY(json_doc)函數 25711.10.4 JSON_DEPTH(json_doc)函數 25711.10.5 JSON_LENGTH(json_doc[, path])函數 25811.10.6 JSON_KEYS(json_doc[, path])函數 25811.10.7 JSON_INSERT(json_doc, path, val[, path, val] ...)函數 25811.10.8 JSON_REMOVE(json_doc, path[, path] ...)函數 25911.10.9 JSON_REPLACE(json_doc, path, val[, path, val] ...)函數 25911.10.10 JSON_SET(json_doc, path, val[, path, val] ...)函數 26011.10.11 JSON_TYPE(json_val)函數 26111.10.12 JSON_VALID(value)函數 26111.11 窗口函數 26111.11.1 序號函數 26311.11.2 分布函數 26411.11.3 前后函數 26511.11.4 首尾函數 26711.11.5 其他函數 26811.12 MySQL的其他函數 26911.12.1 FORMAT(value, n)函數 26911.12.2 CONV(value, from, to)函數 26911.12.3 INET_ATON(value)函數 27011.12.4 INET_NTOA(value)函數 27011.12.5 BENCHMARK(n, expr)函數 27011.12.6 CAST(value AS type)函數 27111.12.7 CONVERT(value USING char_code)函數 27111.13 本章總結 272第12章 MySQL數據變更 27312.1 數據插入 27312.1.1 數據插入規則 27312.1.2 插入完整的行記錄 27412.1.3 指定字段插入數據 27512.1.4 一次插入多條數據記錄 27612.1.5 將查詢結果插入另一個表中 27812.2 數據更新 28012.2.1 更新數據表中的所有記錄 28112.2.2 更新表中特定的數據行 28112.2.3 更新某個范圍內的數據 28212.2.4 更新符合正則表達式的數據 28512.3 數據刪除 28612.3.1 刪除數據表中特定的數據 28612.3.2 刪除某個范圍內的數據 28612.3.3 刪除符合正則表達式的數據 28912.3.4 刪除數據表中的所有數據 28912.4 本章總結 289第13章 MySQL數據查詢 29013.1 數據準備 29013.2 SELECT查詢語句 29113.2.1 查詢表中所有字段的數據 29113.2.2 查詢表中單個字段的數據 29313.2.3 查詢表中指定字段的數據 29413.2.4 使用完全限定字段名查詢數據 29413.2.5 使用完全限定表名查詢數據 29513.3 WHERE條件語句 29613.3.1 WHERE語句語法格式 29613.3.2 查詢單一的特定數據 29613.3.3 查詢某個范圍內的數據 29713.3.4 IN和NOT IN條件語句 29713.3.5 BETWEEN AND條件語句 29813.3.6 LIKE條件語句 29913.3.7 空值條件限制語句 30013.3.8 AND語句 30213.3.9 OR語句 30313.3.10 DISTINCT語句 30313.3.11 ORDER BY語句 30413.3.12 GROUP BY語句 30613.3.13 HAVING語句 30813.3.14 WITH ROLLUP語句 30813.3.15 對數據同時進行分組與排序 30813.3.16 LIMIT語句 30913.4 數據聚合查詢 31013.4.1 查詢數據的總行數 31013.4.2 查詢某列數據的總和 31113.4.3 查詢某列數據的最小值 31213.4.4 查詢某列數據的最大值 31213.4.5 查詢某列數據的平均值 31313.5 JOIN語句 31413.5.1 INNER JOIN語句 31413.5.2 LEFT JOIN語句 31513.5.3 RIGHT JOIN語句 31613.5.4 CROSS JOIN 語句 31713.5.5 使用復合連接條件查詢數據 31713.6 子查詢語句 31813.6.1 ANY子查詢 31813.6.2 ALL子查詢 31913.6.3 EXISTS子查詢 31913.6.4 NOT EXISTS子查詢 32013.6.5 IN子查詢 32013.6.6 NOT IN子查詢 32113.6.7 子查詢作為結果字段 32113.7 UNION聯合語句 32213.7.1 UNION語句 32213.7.2 UNION ALL語句 32313.8 使用別名查詢數據 32313.8.1 為字段名指定別名 32313.8.2 為表名指定別名 32413.8.3 同時為字段名和表名指定別名 32513.9 使用正則表達式查詢數據 32513.10 本章總結 326第14章 MySQL索引 32714.1 索引簡介 32714.1.1 MySQL遍歷表的方式 32714.1.2 索引的優點與缺點 32814.1.3 索引的創建原則 32814.2 索引的使用場景 32914.2.1 適合創建索引的場景 32914.2.2 不適合創建索引的場景 33014.3 創建數據表時創建索引 33014.3.1 語法格式 33014.3.2 創建普通索引 33114.3.3 創建唯一索引 33214.3.4 創建主鍵索引 33314.3.5 創建單列索引 33314.3.6 創建組合索引 33414.3.7 創建全文索引 33714.3.8 創建空間索引 33814.4 為已有數據表添加索引 33814.4.1 語法格式 33914.4.2 創建普通索引 33914.4.3 創建唯一索引 34014.4.4 創建主鍵索引 34114.4.5 創建單列索引 34214.4.6 創建組合索引 34314.4.7 創建全文索引 34414.4.8 創建空間索引 34514.5 刪除索引 34714.5.1 語法格式 34714.5.2 刪除索引方式 34714.6 隱藏索引 34814.6.1 隱藏索引概述 34914.6.2 語法格式 34914.6.3 創建測試表 34914.6.4 索引操作 35014.7 降序索引 35514.7.1 降序索引概述 35514.7.2 降序索引操作 35514.8 函數索引 35914.8.1 函數索引概述 35914.8.2 函數索引操作 35914.9 本章總結 363第15章 MySQL視圖 36415.1 視圖概述 36415.1.1 視圖的概念 36415.1.2 視圖的優點 36415.2 創建視圖 36515.2.1 語法格式 36515.2.2 創建單表視圖 36615.2.3 創建多表聯合視圖 36915.3 查看視圖 37015.3.1 使用SHOW TABLES語句查看視圖 37015.3.2 使用DESCRIBE/DESC語句查看視圖 37115.3.3 使用SHOW TABLE STATUS語句查看視圖 37115.3.4 使用SHOW CREATE VIEW語句查看視圖 37315.3.5 查看views數據表中的視圖信息 37315.4 修改視圖的結構 37415.4.1 使用CREATE OR REPLACE VIEW語句修改視圖結構 37415.4.2 使用ALTER語句修改視圖結構 37515.5 更新視圖的數據 37615.5.1 直接更新視圖數據 37615.5.2 間接更新視圖數據 37915.6 刪除視圖 38115.7 本章總結 382第16章 存儲過程和函數 38316.1 存儲過程和函數簡介 38316.1.1 什么是存儲過程和函數 38316.1.2 存儲過程和函數的使用場景 38416.1.3 存儲過程和函數的優點 38416.2 創建存儲過程和函數 38616.2.1 創建存儲過程 38616.2.2 創建存儲函數 38816.3 查看存儲過程和函數 38916.3.1 查看存儲過程和函數的創建或定義信息 38916.3.2 查看存儲過程和函數的狀態信息 39016.3.3 從數據庫中查看存儲過程和函數的信息 39116.4 修改存儲過程和函數 39416.4.1 修改存儲過程 39416.4.2 修改存儲函數 39516.5 調用存儲過程和函數 39616.5.1 調用存儲過程 39616.5.2 調用存儲函數 39716.6 刪除存儲過程和函數 39816.6.1 刪除存儲過程 39816.6.2 刪除存儲函數 39816.7 MySQL中使用變量 39916.7.1 定義變量 39916.7.2 變量賦值 40016.8 MySQL中使用變量案例 40116.8.1 在存儲過程中使用變量 40116.8.2 在函數中使用變量 40216.9 定義條件和處理程序 40316.9.1 定義條件 40316.9.2 定義處理程序 40416.10 定義條件和處理程序案例 40516.10.1 在存儲過程中未定義條件和處理程序 40616.10.2 在存儲過程中定義條件和處理程序 40716.10.3 在函數中未定義條件和處理程序 40816.10.4 在函數中定義條件和處理程序 40916.11 MySQL中游標的使用 41016.11.1 聲明游標 41016.11.2 打開游標 41016.11.3 使用游標 41116.11.4 關閉游標 41116.12 MySQL中游標的使用案例 41216.12.1 在存儲過程中使用游標 41216.12.2 在函數中使用游標 41316.13 MySQL中控制流程的使用 41416.13.1 使用IF語句控制流程 41416.13.2 使用CASE語句控制流程 41516.13.3 使用LOOP語句控制流程 41716.13.4 使用LEAVE語句控制流程 41816.13.5 使用ITERATE語句控制流程 41816.13.6 使用REPEAT語句控制流程 41916.13.7 使用WHILE語句控制流程 42016.14 本章總結 421第17章 MySQL觸發器 42217.1 創建觸發器 42217.1.1 語法格式 42217.1.2 創建觸發器示例 42317.2 查看觸發器 42517.2.1 使用SHOW TRIGGERS語句查看觸發器的信息 42517.2.2 使用SHOW CREATE TRIGGER語句查看觸發器的信息 42617.2.3 通過查看triggers數據表中的數據查看觸發器的信息 42717.3 刪除觸發器 42917.3.1 語法格式 42917.3.2 刪除觸發器示例 42917.4 本章小結 429第18章 MySQL分區 43018.1 分區介紹 43018.1.1 不同版本MySQL的分區 43018.1.2 分區的優勢 43218.1.3 分區類型 43318.2 RANGE分區 43418.2.1 創建分區表 43418.2.2 添加分區 43718.2.3 刪除分區 43818.2.4 重定義分區 44018.3 LIST分區 44218.3.1 創建分區表 44218.3.2 添加分區 44318.3.3 刪除分區 44418.3.4 重定義分區 44418.4 COLUMNS分區 44518.4.1 RANGE COLUMNS分區 44618.4.2 LIST COLUMNS分區 44718.5 HASH分區 44818.5.1 創建分區表 44818.5.2 添加分區 44918.5.3 合并分區 45018.6 KEY分區 45118.7 子分區 45218.8 分區中的NULL值處理 45218.8.1 RANGE分區中的NULL值 45218.8.2 LIST分區中的NULL值 45318.8.3 HASH分區與KEY分區中的NULL值 45418.9 本章總結 455第19章 MySQL公用表表達式和生成列 45619.1 公用表表達式 45619.1.1 非遞歸CTE 45619.1.2 遞歸CTE 45719.1.3 遞歸CTE的限制 45919.2 生成列 46119.2.1 創建表時指定生成列 46219.2.2 為已有表添加生成列 46319.2.3 修改已有的生成列 46419.2.4 刪除生成列 46419.3 本章總結 465第4篇 MySQL優化第20章 MySQL查詢優化 46820.1 SHOW STATUS語句解析 46820.2 EXPLAIN語句解析 46920.3 SHOW PROFILE語句解析 47720.3.1 分析InnoDB數據表 47820.3.2 分析MyISAM數據表 48020.3.3 分析MySQL源碼 48120.4 pt-query-digest分析查詢 48220.5 優化子查詢 48320.6 本章總結 483第21章 MySQL索引優化 48421.1 索引的類型 48421.2 使用索引的場景 48521.2.1 全值匹配 48521.2.2 查詢范圍 48621.2.3 匹配最左前綴 48621.2.4 查詢索引列 48721.2.5 匹配字段前綴 48721.2.6 精確與范圍匹配索引 48821.2.7 匹配NULL值 48821.2.8 連接查詢匹配索引 48921.2.9 LIKE匹配索引 49021.3 無法使用索引的場景 49021.3.1 以通配符開始的LIKE語句 49021.3.2 數據類型轉換 49121.3.3 聯合索引未匹配最左列 49121.3.4 OR語句 49221.3.5 計算索引列 49221.3.6 范圍條件右側的列無法使用索引 49321.3.7 使用<>或!=操作符匹配查詢條件 49321.3.8 匹配NOT NULL值 49321.3.9 索引耗時 49421.4 使用索引提示 49421.4.1 使用索引 49421.4.2 忽略索引 49521.4.3 強制使用索引 49521.5 使用生成列為JSON建立索引 49621.6 本章總結 497第22章 SQL語句優化 49822.1 嵌套查詢的優化 49822.2 OR條件語句的優化 50022.3 ORDER BY語句的優化 50122.4 GROUP BY語句的優化 50222.5 分頁查詢的優化 50322.5.1 回表查詢優化分頁 50322.5.2 記錄數據標識優化分頁 50422.6 插入數據的優化 50522.6.1 MyISAM數據表插入數據的優化 50522.6.2 InnoDB數據表插入數據的優化 50622.7 刪除數據的優化 50622.8 本章總結 507第23章 數據庫優化 50823.1 優化數據類型 50823.1.1 使用數據類型的基本原則 50823.1.2 優化表中的數據類型 50923.2 刪除重復索引和冗余索引 51123.2.1 創建測試索引 51123.2.2 使用pt-duplicate-key-checker刪除重復索引和冗余索引 51123.2.3 使用mysqlindexcheck刪除重復索引和冗余索引 51323.3 反范式化設計 51423.4 增加中間表 51523.5 分析數據表 51723.6 檢查數據表 51823.7 優化數據表 51823.8 拆分數據表 51923.8.1 垂直拆分數據表 51923.8.2 水平拆分數據表 52023.9 本章總結 520第24章 MySQL服務器優化 52124.1 MySQL服務器硬件的優化 52124.1.1 優化硬件配置 52124.1.2 系統內核優化 52224.2 MySQL配置項的優化 52324.3 本章總結 524第25章 應用程序優化 52525.1 復用數據庫連接 52525.2 減少數據訪問 52625.3 開啟查詢緩存 52725.4 使用外部緩存 52825.5 使用分布式MySQL架構 52925.6 本章總結 529第26章 MySQL的其他優化選項 53026.1 使用performance_schema數據庫分析MySQL 53026.1.1 查看MySQL是否支持performance_schema 53026.1.2 開啟或關閉performance_schema 53226.1.3 performance_schema的簡單配置與使用 53226.2 使用sys數據庫分析MySQL 53526.2.1 sys數據庫概述 53526.2.2 sys數據庫的常用查詢 53526.3 MySQL 8.x中的資源組 53826.3.1 開啟 CAP_SYS_NICE 53826.3.2 創建資源組 53926.3.3 查看資源組 54026.3.4 綁定資源組 54026.3.5 修改資源組 54226.3.6 開啟與禁用資源組 54226.3.7 刪除資源組 54326.4 本章總結 544第5篇 MySQL運維第27章 MySQL命令行工具 54627.1 查看MySQL命令 54627.2 mysql命令 54727.2.1 登錄MySQL終端 54727.2.2 設置客戶端連接編碼 54927.2.3 直接執行SQL語句 55027.2.4 格式化輸出結果 55027.2.5 SQL報錯處理 55127.3 mysqladmin命令 55227.3.1 mysqladmin命令參數 55327.3.2 mysqladmin命令簡單示例 55327.4 myisampack命令 55427.5 mysqlbinlog命令 55527.6 mysqlcheck命令 55827.7 mysqlshow命令 55927.8 mysqldump命令 56127.9 mysqlimport命令 56327.10 本章總結 564第28章 MySQL日志 56528.1 查詢日志 56528.1.1 開啟查詢日志 56528.1.2 查看查詢日志 56628.1.3 刪除查詢日志 56728.1.4 關閉查詢日志 56828.2 慢查詢日志 56828.2.1 開啟慢查詢日志 56828.2.2 查看慢查詢日志 56928.2.3 刪除慢查詢日志 57028.2.4 關閉慢查詢日志 57128.3 錯誤日志 57128.3.1 開啟錯誤日志 57128.3.2 查看錯誤日志 57228.3.3 刪除錯誤日志 57228.3.4 關閉錯誤日志 57328.4 二進制日志 57328.4.1 開啟二進制日志 57328.4.2 查看二進制日志 57428.4.3 刪除二進制日志 57528.4.4 暫時停止與開啟二進制日志 57728.4.5 關閉二進制日志 57728.5 本章總結 577第29章 數據備份與恢復 57829.1 基于mysqldump備份并恢復數據 57829.1.1 備份數據 57829.1.2 恢復數據 58129.2 基于mysqlpump備份并恢復數據 58229.3 基于mydumper備份并恢復數據 58329.3.1 安裝mydumper 58329.3.2 備份數據 58429.3.3 恢復數據 58829.4 基于mysqlhotcopy備份并恢復數據 58929.4.1 安裝mysqlhotcopy 58929.4.2 備份數據 59029.4.3 恢復數據 59029.5 基于xtrabackup備份并恢復數據 59029.5.1 安裝xtrabackup 59029.5.2 備份數據 59129.5.3 恢復準備 59329.5.4 恢復數據 59429.6 數據備份與恢復案例 59629.6.1 完全恢復數據案例 59629.6.2 基于位置點恢復數據案例 59829.6.3 基于時間點恢復數據案例 59829.7 MySQL災難恢復 59829.7.1 問題重現 59929.7.2 問題分析 59929.7.3 問題解決 60029.8 實現數據庫的自動備份 60229.9 導出數據 60329.9.1 使用SELECT INTO OUTFILE語句導出數據 60329.9.2 使用mysqldump命令導出數據 60529.9.3 使用mysql命令導出數據 60629.10 導入數據 60729.10.1 使用LOAD DATA INFILE導入數據 60829.10.2 使用mysqlimport導入數據 60929.11 遇到的問題和解決方案 61029.12 本章總結 611第30章 MySQL賬戶管理 61230.1 MySQL中的權限表 61230.2 創建普通用戶 61330.2.1 使用CREATE USER語句創建用戶 61330.2.2 使用GRANT語句創建用戶 61730.2.3 操作user數據表創建用戶 61930.3 為用戶授權 62030.3.1 權限層級 62030.3.2 使用GRANT語句為用戶授權 62130.3.3 通過操作權限表為用戶授權 62430.4 查看用戶權限 62430.4.1 通過SHOW GRANTS FOR語句查看用戶權限 62430.4.2 通過查詢mysql.user數據表查看用戶權限 62530.4.3 通過查詢information_schema數據庫查看用戶權限 62530.5 修改用戶權限 62630.5.1 使用GRANT語句修改用戶權限 62630.5.2 通過操作數據表修改用戶權限 62730.6 撤銷用戶權限 62830.6.1 使用REVOKE語句撤銷用戶權限 62830.6.2 通過操作數據表撤銷用戶權限 62930.7 修改用戶密碼 63030.7.1 通過mysqladmin修改用戶密碼 63030.7.2 使用SET PASSWORD語句修改用戶密碼 63030.7.3 使用GRANT語句修改用戶密碼 63130.7.4 通過操作user數據表修改用戶密碼 63230.7.5 忘記root密碼的解決方案 63230.8 刪除用戶 63330.8.1 使用DROP USER語句刪除用戶 63330.8.2 使用DELETE語句刪除用戶 63430.9 限制用戶使用資源 63430.9.1 限制用戶使用資源示例 63430.9.2 修改用戶的資源限制 63530.9.3 解除用戶的資源限制 63530.10 MySQL 8.x版本中的賬戶管理 63630.10.1 用戶創建和授權 63630.10.2 認證插件更新 63630.10.3 密碼管理 63830.10.4 角色管理 64030.11 本章總結 644第6篇 MySQL架構第31章 MySQL復制 64631.1 搭建MySQL主從復制環境 64631.1.1 服務器規劃 64631.1.2 搭建MySQL主從環境 64731.1.3 測試MySQL主從復制環境 65031.2 搭建MySQL主主復制環境 65231.2.1 服務器規劃 65231.2.2 將MySQL主從環境切換為主主環境 65231.2.3 直接搭建MySQL主主環境 65431.2.4 測試MySQL主主復制環境 65431.3 添加MySQL從庫 65531.3.1 服務器規劃 65531.3.2 在主從服務器上進行的操作 65631.3.3 測試MySQL主從復制環境 65831.4 切換主從復制到鏈式復制 65931.4.1 服務器規劃 65931.4.2 切換復制模式 66031.5 切換鏈式復制到主從復制 66231.6 搭建MySQL多源復制環境 66531.6.1 服務器規劃 66531.6.2 搭建MySQL多源復制環境 66631.6.3 測試MySQL多源復制環境 66731.7 添加復制過濾器 66831.7.1 復制指定的數據庫 66931.7.2 忽略指定的數據庫 66931.7.3 復制指定的數據表 67031.7.4 忽略指定的數據表 67031.8 設置延遲復制 67131.9 基于GTID搭建MySQL主從復制環境 67131.10 基于半同步模式搭建MySQL主從復制環境 67331.10.1 半同步參數說明 67331.10.2 配置半同步復制 67431.10.3 測試半同步復制 67631.11 本章總結 677第32章 MySQL讀寫分離 67832.1 基于MySQL Proxy實現讀寫分離 67832.1.1 服務器規劃 67832.1.2 安裝Lua環境 67932.1.3 安裝MySQL Proxy 67932.1.4 配置MySQL Proxy讀寫分離 68032.1.5 啟動MySQL Proxy 68332.1.6 測試MySQL Proxy的讀寫分離 68332.2 基于Atlas實現讀寫分離 68532.2.1 服務器規劃 68532.2.2 安裝Atlas 68532.2.3 配置Atlas讀寫分離 68632.2.4 啟動Atlas 68732.2.5 測試Atlas讀寫分離 68932.3 基于ProxySQL實現讀寫分離 68932.3.1 服務器規劃 68932.3.2 安裝ProxySQL 69032.3.3 配置ProxySQL讀寫分離 69032.3.4 測試ProxySQL讀寫分離 69532.4 基于Amoeba實現讀寫分離 69532.4.1 服務器規劃 69532.4.2 安裝JDK 69532.4.3 安裝Amoeba 69632.4.4 配置Amoeba讀寫分離 69732.4.5 啟動Amoeba 69932.4.6 測試Amoeba讀寫分離 70032.5 基于Mycat實現讀寫分離 70032.5.1 服務器規劃 70132.5.2 安裝JDK 70132.5.3 安裝Mycat 70132.5.4 配置Mycat讀寫分離 70232.5.5 啟動Mycat 70332.5.6 測試Mycat讀寫分離 70432.6 本章總結 704第33章 MySQL HA高可用架構 70533.1 基于Keepalived搭建MySQL高可用環境 70533.1.1 服務器規劃 70533.1.2 安裝Keepalived 70633.1.3 配置MySQL高可用 70733.1.4 測試MySQL高可用 71033.1.5 自動重啟MySQL 71133.2 基于HAProxy搭建Mycat高可用環境 71333.2.1 服務器規劃 71333.2.2 安裝Mycat狀態檢查服務 71333.2.3 安裝HAProxy服務 71533.2.4 配置Mycat負載均衡 71633.2.5 測試Mycat高可用環境 71933.3 基于Keepalived搭建HAProxy高可用環境 72133.3.1 服務器規劃 72133.3.2 安裝并配置HAProxy和Keepalived 72133.3.3 配置HAProxy高可用性 72233.3.4 測試HAProxy高可用性 72533.4 本章總結 726參考文獻 727