MySQL 8.0從入門到實戰
張文亮
買這商品的人也買了...
-
$174$165 -
$480$374 -
$403macOS軟件安全與逆向分析
-
$299Python 機器學習手冊:從數據預處理到深度學習 (Machine Learning with Python Cookbook: Practical Solutions from Preprocessing to Deep Learning)
-
$690$538 -
$372$353 -
$780$616 -
$420$378 -
$780$616 -
$450$356 -
$890$703 -
$294$279 -
$359$341 -
$779$740 -
$780$616 -
$714$678 -
$720$562 -
$653Python asyncio 並發編程
-
$650$507 -
$458動手學機器學習
-
$760$593 -
$600$468 -
$806深入理解 Go 並發編程:從原理到實踐,看這本就夠了
-
$658一本書講透 Elasticsearch:原理、進階與工程實務
-
$534$507
相關主題
商品描述
MySQL數據庫是目前全球流行的數據庫之一。《MySQL 8.0從入門到實戰》從入門到實戰,系統全面、由淺入深地介紹MySQL數據庫應用的各個方面。 全書分為8個部分,共18章。第1部分(第1~3章)介紹MySQL的基礎知識,包括初識MySQL、數據庫設計和數據類型;第2部分(第4~6章)介紹MySQL的基本操作,包括SQL基礎操作、MySQL連接查詢和數據復制、MySQL基礎函數;第3部分(第7、8章)介紹MySQL高級查詢函數,包括MySQL高級函數和窗口函數;第4部分(第9、10章)介紹MySQL數據表分區,包括MySQL表分區和分區管理;第5部分(第11、12章)介紹視圖、存儲過程、字符集排序規則的說明和使用,包括MySQL視圖和存儲過程、游標和字符集排序規則;第6部分(第13~15章)介紹MySQL數據查詢優化,包括MySQL索引、InnoDB事務模型和鎖使用、InnoDB內存結構解析和優化;第7部分(第16、17章)介紹MySQL數據運維和讀寫分離架構,包括MySQL數據備份和還原、MySQL主從架構;第8部分(第18章)介紹MySQL數據操作實戰。每一部分和章節都是相對獨立的主題,讀者可以有選擇性地單獨閱讀。此外,《MySQL 8.0從入門到實戰》附有函數速查表,方便讀者在實際工作中快速查找函數。 《MySQL 8.0從入門到實戰》適合想要從事大數據開發和提升自身技能的IT從業人員、數據庫管理員、開發人員等閱讀。通過豐富的理論知識和大量的實例,本書將幫助讀者更好地應對在實際工作中遇到的與MySQL相關的問題。
目錄大綱
目 錄
第1部分 MySQL基礎
第1章 初識MySQL 2
1.1 MySQL是什麽 2
1.2 MySQL 8安裝和配置 3
1.2.1 安裝版本的選擇 3
1.2.2 在Windows平臺下安裝和配置MySQL 3
1.2.3 在Linux平臺下安裝和配置MySQL 10
1.2.4 在Docker平臺下安裝和配置MySQL 14
1.3 如何學習MySQL 18
1.4 本章練習 19
第2章 數據庫設計 20
2.1 關系數據庫設計理論三大範式 20
2.2 連接數據庫和基本信息查詢 24
2.2.1 連接數據庫 24
2.2.2 基本信息查詢 25
2.3 創建數據庫和表 28
2.3.1 創建數據庫 29
2.3.2 創建表 30
2.4 本章練習 31
第3章 MySQL數據類型 32
3.1 數字數據類型 32
3.2 日期和時間數據類型 36
3.3 字符串數據類型 37
3.4 JSON數據類型 43
3.5 本章練習 48
第2部分 MySQL基本操作
第4章 MySQL基礎操作 50
4.1 數據庫操作 50
4.2 數據表操作 52
4.2.1 創建數據表 52
4.2.2 數據表的修改與刪除 54
4.2.3 約束 55
4.3 數據查詢 57
4.4 數據插入 58
4.5 where(篩選) 59
4.6 and和or(與和或) 60
4.7 between(範圍查找) 61
4.8 distinct(去重關鍵字) 62
4.9 update(修改或更新) 62
4.10 delete(刪除) 64
4.11 like(模糊匹配) 65
4.12 order by(排序) 67
4.13 group by(分組) 68
4.14 with rollup(分組統計再統計) 69
4.15 having(分組篩選) 69
4.16 union和union all(組合查詢) 70
4.17 本章練習 72
第5章 MySQL連接查詢和數據復制 74
5.1 連接查詢分類 74
5.2 inner join(內連接) 75
5.3 left join(左連接) 76
5.4 right join(右連接) 77
5.5 in和not in(多關鍵字篩選) 78
5.6 exists和not exists(是否返回結果集) 79
5.7 復製表 80
5.8 臨時表 81
5.9 本章練習 82
第6章 MySQL基礎函數 83
6.1 MySQL字符串函數 83
6.1.1 character_length(s):返回字符串長度 83
6.1.2 concat(s1,s2,,sn):字符串合並 84
6.1.3 format(x,n):數字格式化 84
6.1.4 lpad(s1,len,s2):字符串填充 84
6.1.5 field(s,s1,s2,):返回字符串出現的位置 84
6.1.6 insert(s1,x,len,s2):替換字符串 85
6.1.7 lcase(s):把字符串中的所有字母轉換為小寫字母 85
6.1.8 ucase(s):把字符串中的所有字母轉換為大寫字母 85
6.1.9 strcmp(s1,s2):比較字符串大小 86
6.1.10 replace(s,s1,s2):字符串替換 86
6.1.11 position(s1 in s):獲取子字符串在字符串中出現的位置 86
6.1.12 md5(s):字符串加密 86
6.1.13 inet_aton(ip):把IP地址轉換為數字 87
6.1.14 inet_ntoa (s):把數字轉換為IP地址 87
6.2 MySQL數字函數 87
6.2.1 ceil(x):返回不小於x的最小整數 87
6.2.2 ceiling(x):返回不小於x的最小整數 88
6.2.3 floor(x):返回不大於x的最大整數 88
6.2.4 round(x):返回最接近x的整數 88
6.2.5 max(expression):求最大值 89
6.2.6 min(expression):求最小值 89
6.2.7 sum(expression):求總和 89
6.2.8 avg(expression):求平均值 90
6.2.9 count(expression):求總記錄數 90
6.3 MySQL日期函數 91
6.3.1 adddate(d,n):返回指定日期加上指定天數後的日期 91
6.3.2 addtime(t,n):返回指定時間加上指定時間後的時間 91
6.3.3 curdate():返回當前日期 92
6.3.4 datediff(d1,d2):返回兩個日期相隔的天數 92
6.3.5 dayofyear(d):返回指定日期是本年的第幾天 92
6.3.6 extract(type from d):根據對應格式返回日期 92
6.3.7 now():返回當前日期和時間 93
6.3.8 quarter(d):返回日期對應的季度數 94
6.3.9 second(t):返回指定時間中的秒數 94
6.3.10 timediff(time1, time2):計算時間差 94
6.3.11 date(t):從指定日期時間中提取日期值 95
6.3.12 hour(t):返回指定時間中的小時數 95
6.3.13 time(expression):提取日期時間參數中的時間部分 95
6.3.14 time_format(t,f):根據表達式顯示時間 95
6.3.15 year(d):返回指定日期的年份 96
第3部分 MySQL高級查詢函數
第7章 MySQL高級函數 98
7.1 cast(x as type):數據類型轉換 98
7.2 coalesce(expr1, , exprn):返回第一個非空表達式 99
7.3 if(expr,v1,v2):表達式判斷 99
7.4 ifnull(v1,v2):null替換 99
7.5 isnull(expression):判斷表達式是否為null 100
7.6 nullif(expr1, expr2):字符串相等則返回null 100
7.7 last_insert_id():返回最近生成的自增ID 101
7.8 case expression:表達式分支 101
7.9 本章練習 102
第8章 MySQL窗口函數 103
8.1 窗口函數語法和數據準備 103
8.2 排名函數 105
8.2.1 row_number():順序排名函數 105
8.2.2 rank():跳級排名函數 106
8.2.3 dense_rank():不跳級排名函數 107
8.3 分析函數 108
8.3.1 lag():前分析函數,返回前n行的值 108
8.3.2 lead():後分析函數,返回後n行的值 109
8.4 頭尾函數 109
8.4.1 first_value():頭尾函數,返回第一個值 109
8.4.2 last_value():頭尾函數,返回最後一個值 110
8.5 聚合統計函數 112
8.5.1 sum():聚合統計總和 112
8.5.2 avg():聚合統計平均值 113
8.5.3 max():聚合統計最大值 113
8.5.4 min():聚合統計最小值 114
8.5.5 count():聚合統計總條數 114
8.6 其他函數 115
8.6.1 nth_value():從結果集中的第n行獲取值 115
8.6.2 ntile():數據集分桶 117
8.7 本章練習 118
第4部分 MySQL數據表分區
第9章 MySQL表分區 120
9.1 分區介紹 120
9.2 分區類型 121
9.3 範圍分區 121
9.4 列表分區 124
9.5 列分區 127
9.5.1 範圍列分區 127
9.5.2 列表列分區 132
9.6 哈希分區 134
9.7 鍵分區 137
9.8 子分區 138
9.9 MySQL分區對null的處理 140
9.10 本章練習 145
第10章 MySQL分區管理 146
10.1 範圍分區和列表分區的管理 146
10.1.1 添加和刪除分區 146
10.1.2 拆分合並分區 149
10.2 哈希分區和鍵分區的管理 149
10.3 分區管理和維護操作 150
10.4 分區的限制 152
10.5 分區鍵與主鍵、唯一鍵的關系 153
10.6 本章練習 156
第5部分 視圖、存儲過程、字符集和排序規則的說明和使用
第11章 MySQL視圖和存儲過程 158
11.1 視圖 158
11.2 存儲過程 161
11.2.1 存儲過程的創建和調用 162
11.2.2 帶參數的存儲過程 163
11.2.3 變量 166
11.2.4 註釋 167
11.2.5 存儲過程的修改和刪除 168
11.2.6 存儲過程的控制語句 168
11.3 本章練習 171
第12章 MySQL游標、字符集和排序規則 172
12.1 游標 172
12.2 字符集和排序規則 175
12.2.1 MySQL中的字符集和排序規則 175
12.2.2 列字符集和排序規則 177
12.2.3 使用collate查詢排序規則 178
12.3 本章練習 178
第6部分 MySQL數據查詢優化
第13章 MySQL索引 180
13.1 索引 180
13.2 創建索引的指導原則 183
13.3 B-Tree索引和哈希索引的比較 184
13.4 SQL執行計劃分析 185
13.5 MySQL的索引檢索原理 200
13.5.1 主鍵索引 200
13.5.2 普通索引 204
13.5.3 復合索引 206
13.6 索引的使用技巧與SQL優化實戰 208
13.7 本章練習 213
第14章 InnoDB存儲引擎事務模型和鎖的使用 214
14.1 InnoDB存儲引擎實踐 216
14.2 InnoDB和ACID模型 217
14.2.1 MySQL事務處理的兩種方法 218
14.2.2 InnoDB MVCC 219
14.3 鎖機制 220
14.3.1 表級鎖 221
14.3.2 行級鎖 221
14.3.3 共享鎖 222
14.3.4 排他鎖 223
14.3.5 意向鎖 224
14.3.6 樂觀鎖 225
14.3.7 悲觀鎖 226
14.3.8 間隙鎖 226
14.3.9 記錄鎖 228
14.3.10 臨鍵鎖 228
14.3.11 死鎖 229
14.4 事務隔離級別 229
14.5 本章練習 232
第15章 InnoDB內存結構解析和優化 233
15.1 InnoDB內存結構解析和優化實戰 233
15.1.1 緩沖池原理和優化 234
15.1.2 變更緩沖區原理與優化 245
15.1.3 自適應哈希索引原理與配置 247
15.1.4 日誌緩沖區 248
15.2 InnoDB表實戰調優 248
15.2.1 優化InnoDB表的存儲 248
15.2.2 InnoDB事務處理優化 250
15.2.3 InnoDB只讀事務優化 250
15.2.4 優化InnoDB重做日誌 251
15.2.5 InnoDB磁盤I/O優化 255
15.2.6 配置InnoDB線程並發數量 256
15.2.7 配置InnoDB的I/O讀寫後台線程數量 257
15.2.8 InnoDB的並行讀線程數量 257
15.2.9 InnoDB的I/O容量 258
15.3 本章練習 258
第7部分 MySQL數據運維和讀寫分離架構
第16章 MySQL數據的備份與還原 260
16.1 基準測試 260
16.1.1 Sysbench介紹 261
16.1.2 Sysbench測試實操 262
16.2 備份 266
16.3 還原 267
16.3.1 利用source命令導入數據庫 267
16.3.2 利用load data infile導入數據 268
16.3.3 利用mysqlimport導入數據 268
16.4 本章練習 268
第17章 MySQL主從架構 269
17.1 讀寫分離 269
17.2 MySQL主從復制 270
17.3 MySQL主從復制架構的搭建 271
17.3.1 配置主節點 271
17.3.2 配置從節點 272
17.3.3 主從復制 273
17.4 本章練習 274
第8部分 MySQL操作實戰
第18章 MySQL數據操作實戰 276
18.1 數據庫和數據表的創建與查看 276
18.2 新增、修改、刪除表數據 280
18.3 基礎查詢和where子句查詢 281
18.4 like模糊查詢 286
18.5 分組查詢、聚合函數、排序查詢 287
18.6 關聯查詢 291
18.7 子查詢、多表查詢 293
18.8 本章練習 296
附錄A 函數速查表 299
A.1 MySQL字符串函數 299
A.1.1 ASCII(s):返回字符串的ASCII碼 299
A.1.2 char_length(s):返回字符串長度 300
A.1.3 character_length(s):返回字符串長度 300
A.1.4 concat(s1,s2,,sn):字符串合並 300
A.1.5 concat_ws(x, s1,s2,,sn):字符串合並 300
A.1.6 field(s,s1,s2,):返回字符串出現的位置 301
A.1.7 find_in_set(s1,s2):返回字符串的匹配位置 301
A.1.8 format(x,n):數字格式化 301
A.1.9 insert(s1,x,len,s2):替換字符串 302
A.1.10 locate(s1,s):獲取字符串出現的位置 302
A.1.11 lcase(s):把字符串中的所有字母轉換為小寫字母 302
A.1.12 left(s,n):返回字符串的前n個字符 302
A.1.13 lower(s):把字符串中的所有字母轉換為小寫字母 303
A.1.14 lpad(s1,len,s2):字符串填充 303
A.1.15 ltrim(s):去掉字符串開始處的空格 303
A.1.16 mid(s,n,len):從字符串的指定位置截取子字符串 303
A.1.17 replace(s,s1,s2):字符串替換 304
A.1.18 reverse(s):字符串反轉 304
A.1.19 right(s,n):返回字符串後n個字符 304
A.1.20 rpad(s1,len,s2):在字符串中填充相應字符串 305
A.1.21 position(s1 in s):獲取子字符串在字符串中出現的位置 305
A.1.22 repeat(s,n):字符串重復拼接 305
A.1.23 substring_index(s, s2, number):返回字符串中第n個出現的子字符串 305
A.1.24 trim(s):去掉字符串開始和結尾處的空格 306
A.1.25 ucase(s):把字符串中的所有字母轉換為大寫字母 306
A.1.26 rtrim(s):去掉字符串結尾處的空格 306
A.1.27 strcmp(s1,s2):比較字符串的大小 307
A.1.28 substr(s, start, length):從字符串中截取子字符串 307
A.1.29 substring(s, start, length):從字符串中截取子字符串 307
A.1.30 md5(s):字符串加密 308
A.1.31 inet_aton (ip):把IP地址轉換為數字 308
A.1.32 inet_ntoa(s):把數字轉換為IP地址 308
A.2 MySQL數字函數 309
A.2.1 abs(x):求絕對值 309
A.2.2 sign(x):返回數字符號 309
A.2.3 acos(x):求反餘弦值 309
A.2.4 asin(x):求反正弦值 310
A.2.5 atan (x):求反正切值 310
A.2.6 sin(x):求正弦值 310
A.2.7 cos(x):求餘弦值 310
A.2.8 cot(x):求餘切值 311
A.2.9 tan(x):求正切值 311
A.2.10 degrees(x):將弧度轉換為角度 311
A.2.11 radians(x):將角度轉換為弧度 312
A.2.12 exp(x):返回e的x次方 312
A.2.13 ceil(x):返回不小於x的最小整數 312
A.2.14 ceiling(x):返回不小於x的最小整數 312
A.2.15 floor(x):返回不大於x的最大整數 313
A.2.16 round(x):返回最接近x的整數 313
A.2.17 greatest(expr1,expr2, ):返回列表中的最大值 313
A.2.18 least(expr1, expr2, expr3, ):返回列表中的最小值 314
A.2.19 ln(x):求自然對數 314
A.2.20 log(x)或log(base, x):求對數 314
A.2.21 log10(x):求以10為底的對數 315
A.2.22 log2(x):求以2為底的對數 315
A.2.23 max(expression):求最大值 315
A.2.24 min(expression):求最小值 316
A.2.25 sum(expression):求總和 316
A.2.26 avg(expression):求平均值 317
A.2.27 count(expression):求總記錄數 317
A.2.28 mod(x,y):求餘數 317
A.2.29 pow(x,y):求x的y次方 318
A.2.30 sqrt(x):求平方根 318
A.2.31 rand():求隨機數 318
A.2.32 truncate(x,y):返回保留到小數點後n位的值 319
A.3 MySQL日期函數 319
A.3.1 adddate(d,n):返回指定日期加上指定天數後的日期 319
A.3.2 addtime(t,n):返回指定時間加上指定時間後的時間 319
A.3.3 curdate():返回當前日期 320
A.3.4 current_date():返回當前日期 320
A.3.5 current_time():返回當前時間 320
A.3.6 current_timestamp():返回當前日期和時間 320
A.3.7 curtime():返回當前時間 321
A.3.8 date(t):從指定日期時間中提取日期值 321
A.3.9 datediff(d1,d2):返回兩個日期相隔的天數 321
A.3.10 date_add(d, interval expr type):給指定日期加上一個時間段後的日期 322
A.3.11 date_format(d,f):根據表達式顯示日期 322
A.3.12 date_sub(date, interval expr type):從當前日期減去指定的時間間隔 322
A.3.13 day(d):返回日期值中的日值 323
A.3.14 dayname(d):返回指定日期是星期幾 323
A.3.15 dayofmonth(d):返回指定日期是本月的第幾天 323
A.3.16 dayofweek(d):返回指定日期是所在星期的第幾天 323
A.3.17 dayofyear(d):返回指定日期是本年的第幾天 324
A.3.18 extract (type from d):根據對應格式返回日期 324
A.3.19 from_days(n):返回元年加n天的日期 325
A.3.20 hour(t):返回指定時間中的小時數 325
A.3.21 last_day(d):返回給定日期所在月份的最後一天 326
A.3.22 localtime():返回當前日期和時間 326
A.3.23 localtimestamp():返回當前日期和時間 326
A.3.24 makedate(year, day-of-year):時間組合天數 326
A.3.25 maketime(hour, minute, second):時間組合 327
A.3.26 microsecond(date):返回時間參數中的微秒數 327
A.3.27 minute(t):返回指定時間中的分鐘數 327
A.3.28 monthname(d):返回日期中的月份名稱 328
A.3.29 month(d):返回日期中的月份值 328
A.3.30 now():返回當前日期和時間 328
A.3.31 period_add(period, number):日期加月份數 328
A.3.32 period_diff(period1, period2):返回兩個時間之間的月份差 329
A.3.33 quarter(d):返回日期對應的季度數 329
A.3.34 second(t):返回指定時間中的秒數 329
A.3.35 sec_to_time(s):秒數轉換為時間 329
A.3.36 str_to_date(string, format_mask):把字符串轉換為日期 330
A.3.37 subdate(d,n):從指定日期減去指定天數後的日期 330
A.3.38 subtime(t,n):從指定時間減去指定秒數後的時間 330
A.3.39 sysdate():返回當前日期和時間 331
A.3.40 time(expression):提取日期時間參數中的時間部分 331
A.3.41 time_format(t,f):根據表達式顯示時間 331
A.3.42 time_to_sec(t):把時間轉換為秒數 331
A.3.43 timediff(time1, time2):計算時間差 332
A.3.44 timestamp(expression, interval):指定時間加上時間間隔後的時間 332
A.3.45 to_days(d):計算元年到當前日期的天數 332
A.3.46 week(d):返回指定日期是本年的第幾周 333
A.3.47 weekday(d):返回指定日期是星期幾 333
A.3.48 year(d):返回指定日期的年份 333
A.4 MySQL高級函數 333
A.4.1 bin(x):返回字符串的二進制編碼 333
A.4.2 binary(s):將字符串轉換為二進制數 334
A.4.3 case expression:表達式分支 334
A.4.4 cast(x as type):數據類型轉換 335
A.4.5 coalesce(expr1,,exprn):返回第一個非空表達式 335
A.4.6 connection_id():返回唯一連接ID 335
A.4.7 conv(x,f1,f2):數據進制轉換 335
A.4.8 convert(s using cs):求字符串的字符集 336
A.4.9 current_user():返回當前的用戶名 336
A.4.10 database():返回當前的數據庫名 336
A.4.11 if(expr,v1,v2):表達式判斷 337
A.4.12 ifnull(v1,v2):null替換 337
A.4.13 isnull(expression):判斷表達式是否為null 337
A.4.14 nullif(expr1, expr2):字符串相等則返回null 338
A.4.15 last_insert_id():返回最近生成的自增ID 338
A.4.16 session_user():返回當前會話的用戶名 339
A.4.17 version():返回數據庫的版本號 339