第1章初識MySQL11.1數據庫基礎1
1.1.1什么是數據庫1
1.1.2表2
1.1.3數據類型2
1.1.4主鍵2
1.2數據庫技術構成3
1.2.1數據庫系統3
1.2.2SQL語言4
1.2.3數據庫訪問接口5
1.3什么是MySQL6
1.3.1客戶機-服務器軟件6
1.3.2MySQL版本6
1.3.3MySQL的優勢7
1.3.4MySQL5.7的新功能8
1.4MySQL工具8
1.4.1MySQL命令行實用程序9
1.4.2MySQLWorkbench10
1.5如何學習MySQL10
第2章MySQL的安裝與配置12
2.1Windows平臺下安裝與配置MySQL5.712
2.1.1安裝MySQL5.712
2.1.2配置MySQL5.718
2.2啟動服務并登錄MySQL數據庫22
2.2.1啟動MySQL服務22
2.2.2登錄MySQL數據庫24
2.2.3配置Path變量27
2.3MySQL常用圖形管理工具28
2.4Linux平臺下安裝與配置MySQL5.729
2.4.1Linux操作系統下的MySQL版本介紹29
2.4.2安裝和配置MySQL的RPM包31
2.4.3安裝和配置MySQL的源碼包35
2.5專家解惑36
2.6經典習題36
第3章數據庫的基本操作37
3.1創建數據庫37
3.2刪除數據庫39
3.3數據庫存儲引擎39
3.3.1MySQL存儲引擎簡介39
3.3.2InnoDB存儲引擎41
3.3.3MyISAM存儲引擎42
3.3.4MEMORY存儲引擎43
3.3.5存儲引擎的選擇43
3.4綜合案例——數據庫的創建和刪除44
3.5專家解惑46
3.6經典習題46
第4章數據表的基本操作47
4.1創建數據表47
4.1.1創建表的語法形式47
4.1.2使用主鍵約束49
4.1.3使用外鍵約束50
4.1.4使用非空約束51
4.1.5使用唯一性約束52
4.1.6使用默認約束53
4.1.7設置表的屬性值自動增加53
4.2查看數據表結構54
4.2.1查看表基本結構語句DESCRIBE54
4.2.2查看表詳細結構語句SHOWCREATETABLE55
4.3修改數據表56
4.3.1修改表名57
4.3.2修改字段的數據類型57
4.3.3修改字段名58
4.3.4添加字段59
4.3.5刪除字段62
4.3.6修改字段的排列位置63
4.3.7更改表的存儲引擎64
4.3.8刪除表的外鍵約束65
4.4刪除數據表67
4.4.1刪除沒有被關聯的表67
4.4.2刪除被其他表關聯的主表67
4.5綜合案例——數據表的基本操作69
4.6專家解惑77
4.7經典習題78
第5章數據類型和運算符80
5.1MySQL數據類型介紹80
5.1.1整數類型80
5.1.2浮點數類型和定點數類型82
5.1.3日期與時間類型84
5.1.4文本字符串類型96
5.1.5二進制字符串類型101
5.2如何選擇數據類型104
5.3常見運算符介紹105
5.3.1運算符概述105
5.3.2算術運算符106
5.3.3比較運算符107
5.3.4邏輯運算符116
5.3.5位運算符119
5.3.6運算符的優先級122
5.4綜合案例——運算符的使用123
5.5專家解惑125
5.6經典習題126
第6章MySQL函數127
6.1MySQL函數簡介127
6.2數學函數128
6.2.1絕對值函數ABS(x)和返回圓周率的函數PI()128
6.2.2平方根函數SQRT(x)和求余函數MOD(x,y)128
6.2.3獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x)129
6.2.4獲取隨機數的函數RAND()和RAND(x)130
6.2.5函數ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)130
6.2.6符號函數SIGN(x)131
6.2.7冪運算函數POW(x,y)、POWER(x,y)和EXP(x)132
6.2.8對數運算函數LOG(x)和LOG10(x)132
6.2.9角度與弧度相互轉換的函數RADIANS(x)和DEGREES(x)133
6.2.10正弦函數SIN(x)和反正弦函數ASIN(x)133
6.2.11余弦函數COS(x)和反余弦函數ACOS(x)134
6.2.12正切函數、反正切函數和余切函數134
6.3字符串函數135
6.3.1計算字符串字符數的函數和字符串長度的函數135
6.3.2合并字符串函數CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…)136
6.3.3替換字符串的函數INSERT(s1,x,len,s2)137
6.3.4字母大小寫轉換函數137
6.3.5獲取指定長度的字符串的函數LEFT(s,n)和RIGHT(s,n)138
6.3.6填充字符串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2)139
6.3.7刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s)139
6.3.8刪除指定字符串的函數TRIM(s1FROMs)140
6.3.9重復生成字符串的函數REPEAT(s,n)141
6.3.10空格函數SPACE(n)和替換函數REPLACE(s,s1,s2)141
6.3.11比較字符串大小的函數STRCMP(s1,s2)142
6.3.12獲取子串的函數SUBSTRING(s,n,len)和MID(s,n,len)142
6.3.13匹配子串開始位置的函數143
6.3.14字符串逆序的函數REVERSE(s)143
6.3.15返回指定位置的字符串的函數144
6.3.16返回指定字符串位置的函數FIELD(s,s1,s2,…)144
6.3.17返回子串位置的函數FIND_IN_SET(s1,s2)145
6.3.18選取字符串的函數MAKE_SET(x,s1,s2,…)145
6.4日期和時間函數146
6.4.1獲取當前日期的函數和獲取當前時間的函數146
6.4.2獲取當前日期和時間的函數146
6.4.3UNIX時間戳函數147
6.4.4返回UTC日期的函數和返回UTC時間的函數148
6.4.5獲取月份的函數MONTH(date)和MONTHNAME(date)148
6.4.6獲取星期的函數DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)149
6.4.7獲取星期數的函數WEEK(d)和WEEKOFYEAR(d)150
6.4.8獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d)151
6.4.9獲取年份、季度、小時、分鐘和秒鐘的函數151
6.4.10獲取日期的指定值的函數EXTRACT(typeFROMdate)152
6.4.11時間和秒鐘轉換的函數153
6.4.12計算日期和時間的函數153
6.4.13將日期和時間格式化的函數156
6.5條件判斷函數159
6.5.1IF(expr,v1,v2)函數159
6.5.2IFNULL(v1,v2)函數160
6.5.3CASE函數160
6.6系統信息函數161
6.6.1獲取MySQL版本號、連接數和數據庫名的函數161
6.6.2獲取用戶名的函數163
6.6.3獲取字符串的字符集和排序方式的函數163
6.6.4獲取最后一個自動生成的ID值的函數164
6.7加/解密函數166
6.7.1加密函數PASSWORD(str)166
6.7.2加密函數MD5(str)167
6.7.3加密函數ENCODE(str,pswd_str)167
6.7.4解密函數DECODE(crypt_str,pswd_str)167
6.8其他函數168
6.8.1格式化函數FORMAT(x,n)168
6.8.2不同進制的數字進行轉換的函數168
6.8.3IP地址與數字相互轉換的函數169
6.8.4加鎖函數和解鎖函數170
6.8.5重復執行指定操作的函數170
6.8.6改變字符集的函數171
6.8.7改變數據類型的函數172
6.9綜合案例——MySQL函數的使用172
6.10專家解惑176
6.11經典習題176
第7章查詢數據178
7.1基本查詢語句178
7.2單表查詢180
7.2.1查詢所有字段181
7.2.2查詢指定字段182
7.2.3查詢指定記錄184
7.2.4帶IN關鍵字的查詢185
7.2.5帶BETWEENAND的范圍查詢187
7.2.6帶LIKE的字符匹配查詢188
7.2.7查詢空值190
7.2.8帶AND的多條件查詢191
7.2.9帶OR的多條件查詢192
7.2.10查詢結果不重復193
7.2.11對查詢結果排序195
7.2.12分組查詢198
7.2.13使用LIMIT限制查詢結果的數量203
7.3使用聚合函數查詢205
7.3.1COUNT()函數205
7.3.2SUM()函數206
7.3.3AVG()函數207
7.3.4MAX()函數208
7.3.5MIN()函數209
7.4連接查詢210
7.4.1內連接查詢210
7.4.2外連接查詢214
7.4.3復合條件連接查詢216
7.5子查詢217
7.5.1帶ANY、SOME關鍵字的子查詢217
7.5.2帶ALL關鍵字的子查詢218
7.5.3帶EXISTS關鍵字的子查詢218
7.5.4帶IN關鍵字的子查詢220
7.5.5帶比較運算符的子查詢221
7.6合并查詢結果223
7.7為表和字段取別名225
7.7.1為表取別名226
7.7.2為字段取別名227
7.8使用正則表達式查詢228
7.8.1查詢以特定字符或字符串開頭的記錄229
7.8.2查詢以特定字符或字符串結尾的記錄230
7.8.3用符號"."來替代字符串中的任意一個字符230
7.8.4使用"*"和"+"來匹配多個字符231
7.8.5匹配指定字符串231
7.8.6匹配指定字符中的任意一個233
7.8.7匹配指定字符以外的字符233
7.8.8使用{n,}或者{n,m}來指定字符串連續出現的次數234
7.9綜合案例——數據表查詢操作235
7.10專家解惑243
7.11經典習題244
第8章插入、更新與刪除數據245
8.1插入數據245
8.1.1為表的所有字段插入數據245
8.1.2為表的指定字段插入數據247
8.1.3同時插入多條記錄249
8.1.4將查詢結果插入到表中251
8.2更新數據252
8.3刪除數據254
8.4綜合案例——記錄的插入、更新和刪除256
8.5專家解惑261
8.6經典習題262
第9章索引263
9.1索引簡介263
9.1.1索引的含義和特點263
9.1.2索引的分類264
9.1.3索引的設計原則265
9.2創建索引265
9.2.1創建表的時候創建索引266
9.2.2在已經存在的表上創建索引271
9.3刪除索引278
9.4綜合案例——創建索引280
9.5專家解惑283
9.6經典習題283
第10章存儲過程和函數285
10.1創建存儲過程和函數285
10.1.1創建存儲過程286
10.1.2創建存儲函數288
10.1.3變量的使用289
10.1.4定義條件和處理程序290
10.1.5光標的使用293
10.1.6流程控制的使用294
10.2調用存儲過程和函數299
10.2.1調用存儲過程299
10.2.2調用存儲函數300
10.3查看存儲過程和函數301
10.3.1使用SHOWSTATUS語句查看存儲過程和函數的狀態301
10.3.2使用SHOWCREATE語句查看存儲過程和函數的定義302
10.3.3從information_schema.Routines表中查看存儲過程和函數的信息302
10.4修改存儲過程和函數304
10.5刪除存儲過程和函數306
10.6綜合案例——創建存儲過程和函數306
10.7專家解惑309
10.8經典習題310
第11章視圖311
11.1視圖概述311
11.1.1視圖的含義311
11.1.2視圖的作用312
11.2創建視圖313
11.2.1創建視圖的語法形式313
11.2.2在單表上創建視圖314
11.2.3在多表上創建視圖315
11.3查看視圖316
11.3.1使用DESCRIBE語句查看視圖基本信息316
11.3.2使用SHOWTABLESTATUS語句查看視圖基本信息316
11.3.3使用SHOWCREATEVIEW語句查看視圖詳細信息318
11.3.4在views表中查看視圖詳細信息318
11.4修改視圖320
11.4.1使用CREATEORREPLACEVIEW語句修改視圖320
11.4.2使用ALTER語句修改視圖321
11.5更新視圖322
11.6刪除視圖324
11.7綜合案例——視圖應用325
11.8專家解惑333
11.9經典習題334
第12章MySQL觸發器335
12.1創建觸發器335
12.1.1創建只有一個執行語句的觸發器336
12.1.2創建有多個執行語句的觸發器337
12.2查看觸發器339
12.2.1SHOWTRIGGERS語句查看觸發器信息339
12.2.2在triggers表中查看觸發器信息341
12.3觸發器的使用342
12.4刪除觸發器343
12.5綜合案例——觸發器的使用344
12.6專家解惑346
12.7經典習題346
第13章MySQL用戶管理347
13.1權限表347
13.1.1user表347
13.1.2db表和host表350
13.1.3tables_priv表和columns_priv表352
13.1.4procs_priv表353
13.2賬戶管理353
13.2.1登錄和退出MySQL服務器354
13.2.2新建普通用戶355
13.2.3刪除普通用戶359
13.2.4root用戶修改自己的密碼360
13.2.5root用戶修改普通用戶的密碼362
13.2.6普通用戶修改密碼363
13.2.7root用戶密碼丟失的解決辦法364
13.3權限管理366
13.3.1MySQL的各種權限366
13.3.2授權368
13.3.3收回權限370
13.3.4查看權限371
13.4訪問控制372
13.4.1連接核實階段372
13.4.2請求核實階段372
13.5綜合案例——綜合管理用戶權限373
13.6專家解惑377
13.7經典習題377
第14章數據備份與恢復379
14.1數據備份379
14.1.1使用MySQLdump命令備份379
14.1.2直接復制整個數據庫目錄386
14.1.3使用MySQLhotcopy工具快速備份386
14.2數據恢復387
14.2.1使用MySQL命令恢復387
14.2.2直接復制到數據庫目錄388
14.2.3MySQLhotcopy快速恢復388
14.3數據庫遷移389
14.3.1相同版本的MySQL數據庫之間的遷移389
14.3.2不同版本的MySQL數據庫之間的遷移389
14.3.3不同數據庫之間的遷移390
14.4表的導出和導入390
14.4.1使用SELECTI…INTOOUTFILE導出文本文件390
14.4.2使用MySQLdump命令導出文本文件394
14.4.3使用MySQL命令導出文本文件396
14.4.4使用LOADDATAINFILE方式導入文本文件399
14.4.5使用MySQLimport命令導入文本文件402
14.5綜合案例——數據的備份與恢復403
14.6專家解惑408
14.7經典習題409
第15章MySQL日志410
15.1日志簡介410
15.2二進制日志411
15.2.1啟動和設置二進制日志411
15.2.2查看二進制日志412
15.2.3刪除二進制日志414
15.2.4使用二進制日志恢復數據庫416
15.2.5暫時停止二進制日志功能417
15.3錯誤日志417
15.3.1啟動和設置錯誤日志417
15.3.2查看錯誤日志418
15.3.3刪除錯誤日志419
15.4通用查詢日志419
15.4.1啟動和設置通用查詢日志419
15.4.2查看通用查詢日志420
15.4.3刪除通用查詢日志420
15.5慢查詢日志421
15.5.1啟動和設置慢查詢日志421
15.5.2查看慢查詢日志421
15.5.3刪除慢查詢日志422
15.6綜合案例——MySQL日志的綜合管理422
15.7專家解惑428
15.8經典習題429
第16章性能優化430
16.1優化簡介430
16.2優化查詢431
16.2.1分析查詢語句431
16.2.2索引對查詢速度的影響435
16.2.3使用索引查詢436
16.2.4優化子查詢439
16.3優化數據庫結構439
16.3.1將字段很多的表分解成多個表439
16.3.2增加中間表441
16.3.3增加冗余字段442
16.3.4優化插入記錄的速度443
16.3.5分析表、檢查表和優化表445
16.4優化MySQL服務器446
16.4.1優化服務器硬件447
16.4.2優化MySQL的參數447
16.5綜合案例——全面優化MySQL服務器448
16.6專家解惑451
16.7經典習題452
第17章MySQLReplication453
17.1MySQLReplication概述453
17.2Windows環境下的MySQL主從復制454
17.2.1復制前的準備工作454
17.2.2Windows環境下實現主從復制455
17.2.3Windows環境下主從復制測試462
17.3Linux環境下的MySQL復制463
17.3.1下載并安裝MySQL5.7463
17.3.2單機主從復制前的準備工作465
17.3.3MySQLd_multi實現單機主從復制469
17.3.4不同服務器之間實現主從復制476
17.3.5MySQL主要復制啟動選項478
17.3.6指定復制的數據庫或者表479
17.4查看Slave的復制進度486
17.5日常管理和維護488
17.5.1了解服務器的狀態488
17.5.2服務器復制出錯的原因489
17.6切換主從服務器492
17.7專家解惑496
17.8經典習題497
第18章MySQLWorkbench的使用498
18.1MySQLWorkbench簡介498
18.1.1MySQLWorkbench的概述498
18.1.2MySQLWorkbench的優勢499
18.1.3MySQLWorkbench的安裝499
18.2SQLDevelopment的基本操作501
18.2.1創建數據庫連接501
18.2.2創建新的數據庫502
18.2.3創建和刪除新的數據表504
18.2.4添加、修改表記錄507
18.2.5查詢表記錄508
18.2.6修改表結構509
18.3DataModeling的基本操作510
18.3.1建立ER模型510
18.3.2導入ER模型515
18.4ServerAdministration的基本操作517
18.4.1管理MySQL用戶517
18.4.2備份MySQL數據庫520
18.4.3恢復MySQL數據庫523
18.5專家解惑524
18.6經典習題524
第19章MySQLCluster526
19.1MySQLCluster概述526
19.1.1MySQLCluster基本概念526
19.1.2理解MySQLCluster節點527
19.2Linux環境下MySQLCluster安裝和配置528
19.2.1安裝MySQLCluster軟件531
19.2.2管理節點配置步驟535
19.2.3配置SQL節點和數據節點536
19.3管理MySQLCluster537
19.3.1Cluster的啟動537
19.3.2Cluster的測試539
19.3.3Cluster的關閉541
19.4維護MySQLCluster542
19.4.1Cluster的日志管理544
19.4.2Cluster的聯機備份545
19.4.3Cluster的數據恢復546
19.5Windows操作系統中配置Cluster547
19.6專家解惑553
19.7經典習題554
第20章MySQL管理利器——MySQLUtilities555
20.1MySQLUtilities概述555
20.2安裝與配置556
20.2.1下載與安裝MySQLUtilities556
20.2.2MySQLUtilities連接數據庫559
20.3管理與維護560
20.3.1使用mysqldbcompare比較數據560
20.3.2使用mysqldbcopy復制數據561
20.3.3使用mysqldbexport導出數據561
20.3.4使用mysqldbimport導入數據562
20.3.5使用mysqldiff比較對象的定義562
20.4專家解惑563
20.5經典習題564
第21章讀寫分離的利器——MySQLProxy565
21.1概述565
21.2安裝與配置566
21.2.1下載與安裝MySQLProxy566
21.2.2配置MySQLProxy參數567
21.2.3配置Path變量569
21.3使用MySQLProxy實現讀寫分離571
21.4專家解惑572
21.5經典習題572
第22章PHP操作MySQL數據庫573
22.1PHP訪問MySQL數據庫的一般步驟573
22.2連接數據庫前的準備工作574
22.3PHP操作MySQL數據庫的函數575
22.3.1通過MySQLi類庫訪問MySQL數據庫575
22.3.2使用MySQLi_connect()函數連接MySQL服務器577
22.3.3使用MySQLi_select_db()函數選擇數據庫文件577
22.3.4使用MySQLi_query()函數執行SQL語句578
22.3.5使用MySQLi_fetch_assoc()函數從數組結果集中獲取信息578
22.3.6使用MySQLi_fetch_object()函數從結果中獲取一行作為對象578
22.3.7使用MySQLi_num_rows()函數獲取查詢結果集中的記錄數579
22.3.8使用MySQLi_free_result()函數釋放資源579
22.3.9使用MySQLi_close()函數關閉連接579
22.4綜合實例1——使用insert語句動態添加用戶信息580
22.5綜合實例2——使用select語句查詢數據信息583
22.6專家解惑585
22.7經典習題585
第23章新聞發布系統數據庫設計586
23.1系統概述586
23.2系統功能587
23.3數據庫設計和實現588
23.3.1設計表588
23.3.2設計索引592
23.3.3設計視圖593
23.3.4設計觸發器594
23.4案例總結595
第24章論壇管理系統數據庫設計596
24.1系統概述596
24.2系統功能597
24.3數據庫設計和實現598
24.3.1設計方案圖表598
24.3.2設計表600
24.3.3設計索引603
24.3.4設計視圖604
24.3.5設計觸發器605
24.4案例總結606