●第1章快速搭建SQL的測試環境1
1.1安裝與配置MySQL8.01
1.1.1安裝MySQL8.01
1.1.2配置MySQL8.05
1.2啟動服務並登錄MySQL數據庫10
1.2.1啟動MySQL服務10
1.2.2登錄MySQL數據庫11
1.2.3配置Path變量12
1.3執行SQL語句14
1.4疑難解惑15
1.5經典習題15
第2章數據庫和SQL語句16
2.1數據庫基礎16
2.1.1什麼是數據庫16
2.1.2關繫數據庫的基本特性16
2.1.3數據表17
2.1.4數據類型17
2.1.5主鍵18
2.2數據庫技術構成18
2.2.1數據庫繫統18
2.2.2SQL語言19
2.2.3數據庫訪問接口20
2.3創建學習用的數據庫21
2.4創建數據表22
2.4.1創建表的語法形式23
2.4.2使用主鍵約束24
2.4.3使用外鍵約束25
2.4.4使用非空約束26
2.4.5使用專享性約束27
2.4.6使用默認約束27
2.4.7設置表的屬性值自動增加28
2.5查看數據表結構29
2.5.1查看表基本結構語句DESCRIBE29
2.5.2查看表詳細結構語句SHOWCREATETABLE30
2.6修改數據表31
2.6.1修改表名31
2.6.2修改字段的數據類型32
2.6.3修改字段名33
2.6.4添加字段34
2.6.5刪除字段36
2.6.6修改字段的排列位置37
2.6.7更改表的存儲引擎38
2.6.8刪除表的外鍵約束39
2.7刪除數據表40
2.7.1刪除沒有被關聯的表41
2.7.2刪除被其他表關聯的主表41
2.8綜合案例——數據表的基本操作43
2.9疑難解惑50
2.10經典習題51
第3章數據類型和運算符52
3.1MySQL數據類型介紹52
3.1.1整數類型52
3.1.2浮點數類型和定點數類型54
3.1.3日期與時間類型55
3.1.4文本字符串類型67
3.1.5二進制字符串類型72
3.2如何選擇數據類型75
3.3常見運算符介紹76
3.3.1運算符概述76
3.3.2算術運算符77
3.3.3比較運算符78
3.3.4邏輯運算符86
3.3.5位運算符89
3.3.6運算符的優先級91
3.4綜合案例——運算符的使用92
3.5疑難解惑94
3.6經典習題95
第4章查詢數據96
4.1基本查詢語句96
4.2單表查詢98
4.2.1查詢所有字段98
4.2.2查詢指定字段99
4.2.3查詢指定記錄101
4.2.4帶IN關鍵字的查詢103
4.2.5帶BETWEENAND的範圍查詢104
4.2.6帶LIKE的字符匹配查詢105
4.2.7查詢空值107
4.2.8帶AND的多條件查詢108
4.2.9帶OR的多條件查詢109
4.2.10查詢結果不重復111
4.2.11對查詢結果排序112
4.2.12分組查詢115
4.2.13使用LIMIT查詢結果的數量120
4.3使用聚合函數查詢121
4.3.1COUNT()函數122
4.3.2SUM()函數123
4.3.3AVG()函數124
4.3.4MAX()函數125
4.3.5MIN()函數126
4.4連接查詢127
4.4.1內連接查詢127
4.4.2外連接查詢130
4.4.3復合條件連接查詢132
4.5子查詢133
4.5.1帶ANY、SOME關鍵字的子查詢133
4.5.2帶ALL關鍵字的子查詢134
4.5.3帶EXISTS關鍵字的子查詢134
4.5.4帶IN關鍵字的子查詢136
4.5.5帶比較運算符的子查詢138
4.6合並查詢結果139
4.7為數據表和字段取別名142
4.7.1為數據表取別名142
4.7.2為字段取別名143
4.8使用正則表達式查詢145
4.8.1查詢以特定字符或字符串開頭的記錄146
4.8.2查詢以特定字符或字符串結尾的記錄146
4.8.3用符號'.'來替代字符串中的任意一個字符147
4.8.4使用'*'和'+'來匹配多個字符148
4.8.5匹配指定字符串148
4.8.6匹配指定字符中的任意一個149
4.8.7匹配指定字符以外的字符150
4.8.8使用{n,}或者{n,m}來指定字符串連續出現的次數151
4.9GROUPBY不再隱式排序152
4.10通用表表達式154
4.11綜合案例——數據表查詢操作158
4.12疑難解惑165
4.13經典習題165
第5章插入、更新與刪除數據167
5.1插入數據167
5.1.1為表的所有字段插入數據167
5.1.2為表的指定字段插入數據169
5.1.3同時插入多條記錄170
5.1.4將查詢結果插入到表中172
5.2更新數據174
5.3刪除數據176
5.4為表增加計算字段178
5.5DDL的原子化179
5.6綜合案例——記錄的插入、更新和刪除180
5.7疑難解惑184
5.8經典習題185
第6章函數186
6.1MySQL函數簡介186
6.2數學函數186
6.2.1絕對值函數ABS(x)和返回圓周率的函數PI()186
6.2.2平方根函數SQRT(x)和求餘函數MOD(x,y)187
6.2.3獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x)187
6.2.4獲取隨機數的函數RAND()和RAND(x)188
6.2.5函數ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)189
6.2.6符號函數SIGN(x)190
6.2.7冪運算函數POW(x,y)、POWER(x,y)和EXP(x)190
6.2.8對數運算函數LOG(x)和LOG10(x)191
6.2.9角度與弧度相互轉換的函數RADIANS(x)和DEGREES(x)191
6.2.10正弦函數SIN(x)和反正弦函數ASIN(x)192
6.2.11餘弦函數COS(x)和反餘弦函數ACOS(x)193
6.2.12正切函數、反正切函數和餘切函數193
6.3字符串函數194
6.3.1計算字符串字符數的函數和字符串長度的函數194
6.3.2合並字符串函數CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…)195
6.3.3替換字符串的函數INSERT(s1,x,len,s2)196
6.3.4字母大小寫轉換函數196
6.3.5獲取指定長度的字符串的函數LEFT(s,n)和RIGHT(s,n)197
6.3.6填充字符串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2)197
6.3.7刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s)198
6.3.8刪除指定字符串的函數TRIM(s1FROMs)199
6.3.9重復生成字符串的函數REPEAT(s,n)199
6.3.10空格函數SPACE(n)和替換函數REPLACE(s,s1,s2)200
6.3.11比較字符串大小的函數STRCMP(s1,s2)200
6.3.12獲取子字符串的函數SUBSTRING(s,n,len)和MID(s,n,len)201
6.3.13匹配子字符串開始位置的函數202
6.3.14字符串逆序的函數REVERSE(s)202
6.3.15返回指定位置的字符串的函數202
6.3.16返回指定字符串位置的函數FIELD(s,s1,s2,...)203
6.3.17返回子字符串位置的函數FIND_IN_SET(s1,s2)203
6.3.18選取字符串的函數MAKE_SET(x,s1,s2,...)204
6.4日期和時間函數204
6.4.1獲取當前日期的函數和獲取當前時間的函數204
6.4.2獲取當前日期和時間的函數205
6.4.3UNIX時間戳函數205
6.4.4返回UTC日期的函數和返回UTC時間的函數206
6.4.5獲取月份的函數MONTH(date)和MONTHNAME(date)207
6.4.6獲取星期的函數DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)207
6.4.7獲取星期數的函數WEEK(d)和WEEKOFYEAR(d)208
6.4.8獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d)209
6.4.9獲取年份、季度、小時、分鐘和秒鐘的函數210
6.4.10提取日期和時間中的指定值的函數EXTRACT(typeFROMdate)211
6.4.11時間和秒鐘轉換的函數211
6.4.12計算日期和時間的函數212
6.4.13將日期和時間格式化的函數215
6.5條件判斷函數217
6.5.1IF(expr,v1,v2)函數218
6.5.2IFNULL(v1,v2)函數218
6.5.3CASE函數218
6.6繫統信息函數219
6.6.1獲取MySQL版本號、連接數和數據庫名的函數219
6.6.2獲取用戶名的函數221
6.6.3獲取字符串的字符集和排序方式的函數222
6.6.4獲取最後一個自動生成的ID值的函數222
6.7加密函數224
6.7.1加密函數MD5(str)224
6.7.2加密函數SHA(str)224
6.7.3加密函數SHA2(str,hash_length)225
6.8其他函數225
6.8.1格式化函數FORMAT(x,n)225
6.8.2不同進制的數字進行轉換的函數226
6.8.3IP地址與數字相互轉換的函數226
6.8.4加鎖函數和解鎖函數227
6.8.5重復執行指定操作的函數228
6.8.6改變字符集的函數228
6.8.7改變數據類型的函數229
6.9窗口函數229
6.10綜合案例——MySQL函數的使用231
6.11疑難解惑234
6.12經典習題235
第7章索引236
7.1索引簡介236
7.1.1索引的含義和特點236
7.1.2索引的分類237
7.1.3索引的設計原則237
7.2創建索引238
7.2.1創建數據表的時候創建索引238
7.2.2在現有的數據表上創建索引244
7.3刪除索引251
7.4降序索引252
7.5統計直方圖255
7.5.1直方圖的優點255
7.5.2直方圖的基本操作256
7.6綜合案例——創建索引257
7.7疑難解惑260
7.8經典習題260
第8章視圖262
8.1視圖概述262
8.1.1視圖的含義262
8.1.2視圖的作用263
8.2創建視圖263
8.2.1創建視圖的語法形式264
8.2.2在單表上創建視圖264
8.2.3在多表上創建視圖265
8.3查看視圖266
8.3.1使用DESCRIBE語句查看視圖基本信息266
8.3.2使用SHOWTABLESTATUS語句查看視圖基本信息267
8.3.3使用SHOWCREATEVIEW語句查看視圖詳細信息268
8.3.4在views表中查看視圖詳細信息268
8.4修改視圖270
8.4.1使用CREATEORREPLACEVIEW語句修改視圖270
8.4.2使用ALTER語句修改視圖271
8.5更新視圖272
8.6刪除視圖274
8.7綜合案例——視圖應用275
8.8疑難解惑283
8.9經典習題284
第9章觸發器285
9.1創建觸發器285
9.1.1創建隻有一個執行語句的觸發器285
9.1.2創建有多個執行語句的觸發器286
9.2查看觸發器289
9.2.1SHOWTRIGGERS語句查看觸發器信息289
9.2.2在triggers表中查看觸發器信息291
9.3觸發器的使用292
9.4刪除觸發器293
9.5綜合案例——觸發器的使用293
9.6疑難解惑295
9.7經典習題296
第10章存儲過程和存儲函數297
10.1創建存儲過程和函數297
10.1.1創建存儲過程297
10.1.2創建存儲函數299
10.1.3變量的使用300
10.1.4定義條件和處理程序301
10.1.5光標的使用304
10.1.6流程控制語句的使用306
10.2調用存儲過程和存儲函數310
10.2.1調用存儲過程310
10.2.2調用存儲函數311
10.3查看存儲過程和存儲函數312
10.3.1使用SHOWSTATUS語句查看存儲過程和存儲函數的狀態312
10.3.2使用SHOWCREATE語句查看存儲過程和存儲函數的定義313
10.3.3從information_schema.Routines表中查看存儲過程和存儲函數的信息313
10.4修改存儲過程和存儲函數315
10.5刪除存儲過程和存儲函數316
10.6全局變量的持久化317
10.7綜合案例——創建存儲過程和函數318
10.8疑難解惑321
10.9經典習題322
第11章通過應用程序連接數據庫323
11.1PHP訪問MySQL數據庫的一般步驟323
11.2連接數據庫前的準備工作323
11.3訪問數據庫324
11.3.1使用mysqli_connect()函數連接MySQL服務器324
11.3.2使用mysqli_select_db()函數更改默認的數據庫326
11.3.3使用mysqli_close()函數關閉MySQL連接326
11.3.4使用mysqli_query()函數執行SQL語句327
11.3.5獲取查詢結果集中的記錄數328
11.3.6獲取結果集內的一條記錄作為枚舉數組329
11.3.7獲取結果集內的記錄作為關聯數組330
11.3.8獲取結果集內的記錄作為對像330
11.3.9使用mysqli_fetch_array()函數獲取結果集內的記錄331
11.3.10使用mysqli_free_result()函數釋放資源331
11.4PHP操作MySQL數據庫332
11.5使用insert語句動態添加用戶信息334
11.6使用select語句查詢數據信息336
11.7疑難解惑338
11.8經典習題338