目 錄
第1章 認(rèn)識(shí)MySQL 5.7 1
1.1 數(shù)據(jù)庫基礎(chǔ) 1
1.1.1
什么是數(shù)據(jù)庫 1
1.1.2
表 2
1.1.3
數(shù)據(jù)類型 2
1.1.4
主鍵 2
1.2 數(shù)據(jù)庫技術(shù)構(gòu)成 3
1.2.1
數(shù)據(jù)庫系統(tǒng) 3
1.2.2
SQL語言 4
1.2.3
數(shù)據(jù)庫訪問接口 5
1.3 了解MySQL數(shù)據(jù)庫 5
1.3.1
客戶機(jī)-服務(wù)器軟件 6
1.3.2
MySQL的版本 6
1.3.3
MySQL的優(yōu)勢(shì) 7
1.4
MySQL 5.7的新功能 8
1.5 學(xué)習(xí)MySQL的訣竅 8
第2章 MySQL的安裝與配置 10
2.1 在Windows平臺(tái)下安裝與配置MySQL
5.7 10
2.1.1
安裝MySQL 5.7 10
2.1.2
配置MySQL 5.7 15
2.2 啟動(dòng)服務(wù)并登錄MySQL數(shù)據(jù)庫 19
2.2.1
啟動(dòng)MySQL服務(wù) 20
2.2.2
登錄MySQL數(shù)據(jù)庫 21
2.2.3
配置Path變量 24
2.3
MySQL常用圖形管理工具 26
2.4 在Linux平臺(tái)下安裝與配置MySQL
5.7 27
2.4.1
Linux操作系統(tǒng)下的MySQL版本介紹 27
2.4.2
安裝和配置MySQL的RPM包 29
2.4.3
安裝和配置MySQL的源碼包 33
2.5 疑難解惑 34
2.6 上機(jī)練練手 34
第3章 數(shù)據(jù)庫的基本操作 35
3.1 創(chuàng)建數(shù)據(jù)庫 35
3.2 刪除數(shù)據(jù)庫 37
3.3 理解數(shù)據(jù)庫存儲(chǔ)引擎 37
3.3.1
MySQL存儲(chǔ)引擎簡(jiǎn)介 37
3.3.2
InnoDB存儲(chǔ)引擎 39
3.3.3
MyISAM存儲(chǔ)引擎 40
3.3.4
MEMORY存儲(chǔ)引擎 41
3.3.5
存儲(chǔ)引擎的選擇 41
3.4 實(shí)戰(zhàn)演練——數(shù)據(jù)庫的創(chuàng)建和刪除 42
3.5 疑難解惑 44
3.6 上機(jī)練練手 44
第4章 數(shù)據(jù)表的基本操作 45
4.1 創(chuàng)建數(shù)據(jù)表 45
4.1.1
創(chuàng)建表的語法形式 45
4.1.2
使用主鍵約束 47
4.1.3
使用外鍵約束 48
4.1.4
使用非空約束 49
4.1.5
使用唯一性約束 50
4.1.6
使用默認(rèn)約束 50
4.1.7
設(shè)置表的屬性值自動(dòng)增加 51
4.2 查看數(shù)據(jù)表結(jié)構(gòu) 52
4.2.1
查看表基本結(jié)構(gòu)語句DESCRIBE 52
4.2.2
查看表詳細(xì)結(jié)構(gòu)語句SHOW CREATE TABLE 53
4.3 修改數(shù)據(jù)表 54
4.3.1
修改表名 55
4.3.2
修改字段的數(shù)據(jù)類型 55
4.3.3
修改字段名 56
4.3.4
添加字段 57
4.3.5
刪除字段 60
4.3.6
修改字段的排列位置 61
4.3.7
更改表的存儲(chǔ)引擎 62
4.3.8
刪除表的外鍵約束 63
4.4 刪除數(shù)據(jù)表 64
4.4.1
刪除沒有被關(guān)聯(lián)的表 65
4.4.2
刪除被其他表關(guān)聯(lián)的主表 65
4.5 實(shí)戰(zhàn)演練——數(shù)據(jù)表的基本操作 67
4.6 疑難解惑 75
4.7 上機(jī)練練手 76
第5章 數(shù)據(jù)類型和運(yùn)算符 77
5.1
MySQL數(shù)據(jù)類型介紹 77
5.1.1
整數(shù)類型 77
5.1.2
浮點(diǎn)數(shù)類型和定點(diǎn)數(shù)類型 79
5.1.3
日期與時(shí)間類型 81
5.1.4
文本字符串類型 93
5.1.5
二進(jìn)制字符串類型 98
5.2 如何選擇數(shù)據(jù)類型 101
5.3 常見運(yùn)算符介紹 102
5.3.1
運(yùn)算符概述 103
5.3.2
算術(shù)運(yùn)算符 103
5.3.3
比較運(yùn)算符 105
5.3.4
邏輯運(yùn)算符 113
5.3.5
位運(yùn)算符 116
5.3.6
運(yùn)算符的優(yōu)先級(jí) 119
5.4 實(shí)戰(zhàn)演練——運(yùn)算符的使用 119
5.5 疑難解惑 122
5.6 上機(jī)練練手 123
第6章 MySQL函數(shù) 124
6.1
MySQL函數(shù)簡(jiǎn)介 124
6.2 數(shù)學(xué)函數(shù) 125
6.2.1
絕對(duì)值函數(shù)ABS(x)和返回圓周率的函數(shù)PI() 125
6.2.2
平方根函數(shù)SQRT(x)和求余函數(shù)MOD(x,y) 125
6.2.3
獲取整數(shù)的函數(shù)CEIL(x)、CEILING(x)和FLOOR(x) 126
6.2.4
獲取隨機(jī)數(shù)的函數(shù)RAND()和RAND(x) 127
6.2.5
函數(shù)ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 127
6.2.6
符號(hào)函數(shù)SIGN(x) 129
6.2.7
冪運(yùn)算函數(shù)POW(x,y)、POWER(x,y)和EXP(x) 129
6.2.8
對(duì)數(shù)運(yùn)算函數(shù)LOG(x)和LOG10(x) 130
6.2.9
角度與弧度相互轉(zhuǎn)換的函數(shù)RADIANS(x)和DEGREES(x) 130
6.2.10
正弦函數(shù)SIN(x)和反正弦函數(shù)ASIN(x) 131
6.2.11
余弦函數(shù)COS(x)和反余弦函數(shù)ACOS(x) 132
6.2.12
正切函數(shù)、反正切函數(shù)和余切函數(shù) 132
6.3 字符串函數(shù) 133
6.3.1
計(jì)算字符串字符數(shù)和字符串長(zhǎng)度的函數(shù) 133
6.3.2
合并字符串函數(shù)CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 134
6.3.3
替換字符串的函數(shù)INSERT(s1,x,len,s2) 135
6.3.4
字母大小寫轉(zhuǎn)換函數(shù) 136
6.3.5
獲取指定長(zhǎng)度的字符串的函數(shù)LEFT(s,n)和RIGHT(s,n) 136
6.3.6
填充字符串的函數(shù)LPAD(s1,len,s2)和RPAD(s1,len,s2) 137
6.3.7
刪除空格的函數(shù)LTRIM(s)、RTRIM(s)和TRIM(s) 138
6.3.8
刪除指定字符串的函數(shù)TRIM(s1 FROM s) 139
6.3.9
重復(fù)生成字符串的函數(shù)REPEAT(s,n) 139
6.3.10
空格函數(shù)SPACE(n)和替換函數(shù)REPLACE(s,s1,s2) 140
6.3.11
比較字符串大小的函數(shù)STRCMP(s1,s2) 140
6.3.12
獲取子串的函數(shù)SUBSTRING(s,n,len)和MID(s,n,len) 141
6.3.13
匹配子串開始位置的函數(shù) 142
6.3.14
字符串逆序的函數(shù)REVERSE(s) 142
6.3.15
返回指定位置的字符串的函數(shù) 142
6.3.16
返回指定字符串位置的函數(shù)FIELD(s,s1,s2,…) 143
6.3.17
返回子串位置的函數(shù)FIND_IN_SET(s1,s2) 143
6.3.18
選取字符串的函數(shù)MAKE_SET(x,s1,s2,…) 144
6.4 日期和時(shí)間函數(shù) 144
6.4.1
獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前時(shí)間的函數(shù) 144
6.4.2
獲取當(dāng)前日期和時(shí)間的函數(shù) 145
6.4.3
UNIX時(shí)間戳函數(shù) 146
6.4.4
返回UTC日期的函數(shù)和返回UTC時(shí)間的函數(shù) 146
6.4.5
獲取月份的函數(shù)MONTH(date)和MONTHNAME(date) 147
6.4.6
獲取星期的函數(shù)DAYNAME(d)、DAYOFWEEK(d) 和WEEKDAY(d) 148
6.4.7
獲取星期數(shù)的函數(shù)WEEK(d)和WEEKOFYEAR(d) 149
6.4.8
獲取天數(shù)的函數(shù)DAYOFYEAR(d)和DAYOFMONTH(d) 150
6.4.9
獲取年份、季度、小時(shí)、分鐘和秒鐘的函數(shù) 150
6.4.10
獲取日期的指定值的函數(shù)EXTRACT(type FROM date) 152
6.4.11
時(shí)間和秒鐘轉(zhuǎn)換的函數(shù) 152
6.4.12
計(jì)算日期和時(shí)間的函數(shù) 153
6.4.13
將日期和時(shí)間格式化的函數(shù) 156
6.5 條件判斷函數(shù) 159
6.5.1
IF(expr,v1,v2)函數(shù) 159
6.5.2
IFNULL(v1,v2)函數(shù) 159
6.5.3
CASE函數(shù) 160
6.6 系統(tǒng)信息函數(shù) 161
6.6.1
獲取MySQL版本號(hào)、連接數(shù)和數(shù)據(jù)庫名的函數(shù) 161
6.6.2
獲取用戶名的函數(shù) 163
6.6.3
獲取字符串的字符集和排序方式的函數(shù) 163
6.6.4
獲取*后一個(gè)自動(dòng)生成的ID值的函數(shù) 164
6.7 加密函數(shù) 166
6.7.1
加密函數(shù)PASSWORD(str) 166
6.7.2
加密函數(shù)MD5(str) 167
6.7.3
加密函數(shù)ENCODE(str,pswd_str) 167
6.7.4
解密函數(shù)DECODE(crypt_str,pswd_str) 167
6.8 其他函數(shù) 168
6.8.1
格式化函數(shù)FORMAT(x,n) 168
6.8.2
不同進(jìn)制的數(shù)字進(jìn)行轉(zhuǎn)換的函數(shù) 168
6.8.3
IP地址與數(shù)字相互轉(zhuǎn)換的函數(shù) 169
6.8.4
加鎖函數(shù)和解鎖函數(shù) 170
6.8.5
重復(fù)執(zhí)行指定操作的函數(shù) 171
6.8.6
改變字符集的函數(shù) 171
6.8.7
改變數(shù)據(jù)類型的函數(shù) 172
6.9 實(shí)戰(zhàn)演練——MySQL函數(shù)的使用 172
6.10
疑難解惑 176
6.11
上機(jī)練練手 176
第7章 查詢數(shù)據(jù) 178
7.1 基本查詢語句 178
7.2 單表查詢 180
7.2.1
查詢所有字段 181
7.2.2
查詢指定字段 182
7.2.3
查詢指定記錄 184
7.2.4
帶IN關(guān)鍵字的查詢 185
7.2.5
帶BETWEEN AND的范圍查詢 187
7.2.6
帶LIKE的字符匹配查詢 188
7.2.7
查詢空值 190
7.2.8
帶AND的多條件查詢 191
7.2.9
帶OR的多條件查詢 192
7.2.10
查詢結(jié)果不重復(fù) 193
7.2.11
對(duì)查詢結(jié)果排序 195
7.2.12
分組查詢 198
7.2.13
使用LIMIT限制查詢結(jié)果的數(shù)量 203
7.3 使用集合函數(shù)查詢 205
7.3.1
COUNT()函數(shù) 205
7.3.2
SUM()函數(shù) 206
7.3.3
AVG()函數(shù) 207
7.3.4
MAX()函數(shù) 208
7.3.5
MIN()函數(shù) 209
7.4 連接查詢 210
7.4.1
內(nèi)連接查詢 211
7.4.2
外連接查詢 214
7.4.3
復(fù)合條件連接查詢 216
7.5 子查詢 217
7.5.1
帶ANY、SOME關(guān)鍵字的子查詢 217
7.5.2
帶ALL關(guān)鍵字的子查詢 218
7.5.3
帶EXISTS關(guān)鍵字的子查詢 218
7.5.4
帶IN關(guān)鍵字的子查詢 220
7.5.5
帶比較運(yùn)算符的子查詢 222
7.6 合并查詢結(jié)果 223
7.7 為表和字段取別名 226
7.7.1
為表取別名 226
7.7.2
為字段取別名 227
7.8 使用正則表達(dá)式查詢 229
7.8.1
查詢以特定字符或字符串開頭的記錄 230
7.8.2
查詢以特定字符或字符串結(jié)尾的記錄 231
7.8.3
用符號(hào)"."來替代字符串中的任意一個(gè)字符 231
7.8.4
使用"*"和" "來匹配多個(gè)字符 232
7.8.5
匹配指定字符串 232
7.8.6
匹配指定字符中的任意一個(gè) 233
7.8.7
匹配指定字符以外的字符 234
7.8.8
使用{n,}或者{n,m}來指定字符串連續(xù)出現(xiàn)的次數(shù) 235
7.9 實(shí)戰(zhàn)演練——數(shù)據(jù)表查詢操作 236
7.10
疑難解惑 244
7.11
上機(jī)練練手 245
第8章 插入、更新與刪除數(shù)據(jù) 246
8.1 插入數(shù)據(jù) 246
8.1.1
為表的所有字段插入數(shù)據(jù) 246
8.1.2
為表的指定字段插入數(shù)據(jù) 248
8.1.3
同時(shí)插入多條記錄 250
8.1.4
將查詢結(jié)果插入到表中 252
8.2 更新數(shù)據(jù) 253
8.3 刪除數(shù)據(jù) 255
8.4 實(shí)戰(zhàn)演練——記錄的插入、更新和刪除 257
8.5 疑難解惑 262
8.6 上機(jī)練練手 263
第9章 索引 264
9.1 索引簡(jiǎn)介 264
9.1.1
索引的含義和特點(diǎn) 264
9.1.2
索引的分類 265
9.1.3
索引的設(shè)計(jì)原則 266
9.2 創(chuàng)建索引 266
9.2.1
創(chuàng)建表的時(shí)候創(chuàng)建索引 266
9.2.2
在已經(jīng)存在的表上創(chuàng)建索引 272
9.3 刪除索引 279
9.4 實(shí)戰(zhàn)演練——創(chuàng)建索引 281
9.5 疑難解惑 284
9.6 上機(jī)練練手 284
第10章 存儲(chǔ)過程和函數(shù) 285
10.1
創(chuàng)建存儲(chǔ)過程和函數(shù) 285
10.1.1
創(chuàng)建存儲(chǔ)過程 286
10.1.2
創(chuàng)建存儲(chǔ)函數(shù) 288
10.1.3
變量的使用 289
10.1.4
定義條件和處理程序 290
10.1.5
光標(biāo)的使用 293
10.1.6
流程控制的使用 294
10.2
調(diào)用存儲(chǔ)過程和函數(shù) 299
10.2.1
調(diào)用存儲(chǔ)過程 299
10.2.2
調(diào)用存儲(chǔ)函數(shù) 300
10.3
查看存儲(chǔ)過程和函數(shù) 300
10.3.1
使用SHOW STATUS語句查看存儲(chǔ)過程和函數(shù)的狀態(tài) 301
10.3.2
使用SHOW CREATE語句查看存儲(chǔ)過程和函數(shù)的定義 301
10.3.3
從information_schema.Routines表中查看存儲(chǔ)過程和函數(shù)的信息 302
10.4
修改存儲(chǔ)過程和函數(shù) 303
10.5
刪除存儲(chǔ)過程和函數(shù) 305
10.6
實(shí)戰(zhàn)演練——創(chuàng)建存儲(chǔ)過程和函數(shù) 306
10.7
疑難解惑 309
10.8
上機(jī)練練手 310
第11章 視圖 311
11.1
視圖概述 311
11.1.1
視圖的含義 311
11.1.2
視圖的作用 312
11.2
創(chuàng)建視圖 313
11.2.1
創(chuàng)建視圖的語法形式 313
11.2.2
在單表上創(chuàng)建視圖 314
11.2.3
在多表上創(chuàng)建視圖 315
11.3
查看視圖 316
11.3.1
使用DESCRIBE語句查看視圖基本信息 316
11.3.2
使用SHOW TABLE STATUS語句查看視圖基本信息 316
11.3.3
使用SHOW CREATE VIEW語句查看視圖詳細(xì)信息 318
11.3.4
在views表中查看視圖詳細(xì)信息 318
11.4
修改視圖 320
11.4.1
使用CREATE OR REPLACE VIEW語句修改視圖 320
11.4.2
使用ALTER語句修改視圖 321
11.5
更新視圖 322
11.6
刪除視圖 324
11.7
實(shí)戰(zhàn)演練——視圖應(yīng)用 325
11.8
疑難解惑 333
11.9
上機(jī)練練手 334
第12章 MySQL觸發(fā)器 335
12.1
創(chuàng)建觸發(fā)器 335
12.1.1
創(chuàng)建只有一個(gè)執(zhí)行語句的觸發(fā)器 336
12.1.2
創(chuàng)建有多個(gè)執(zhí)行語句的觸發(fā)器 337
12.2
查看觸發(fā)器 339
12.2.1
SHOW TRIGGERS語句查看觸發(fā)器信息 339
12.2.2
在triggers表中查看觸發(fā)器信息 341
12.3
使用觸發(fā)器 343
12.4
刪除觸發(fā)器 343
12.5
實(shí)戰(zhàn)演練——觸發(fā)器的使用 344
12.6
疑難解惑 346
12.7
上機(jī)練練手 346
第13章 MySQL用戶管理 347
13.1
權(quán)
限 表 347
13.1.1
user表 347
13.1.2
db表和host表 350
13.1.3
tables_priv表和columns_priv表 351
13.1.4
procs_priv表 352
13.2
賬戶管理 353
13.2.1
登錄和退出MySQL服務(wù)器 353
13.2.2
新建普通用戶 355
13.2.3
刪除普通用戶 359
13.2.4
root用戶修改自己的密碼 360
13.2.5
root用戶修改普通用戶密碼 361
13.2.6
普通用戶修改密碼 363
13.2.7
root用戶密碼丟失的解決辦法 363
13.3
權(quán)限管理 365
13.3.1
MySQL的各種權(quán)限 365
13.3.2
授權(quán) 367
13.3.3
收回權(quán)限 369
13.3.4
查看權(quán)限 370
13.4
訪問控制 371
13.4.1
連接核實(shí)階段 371
13.4.2
請(qǐng)求核實(shí)階段 371
13.5
實(shí)戰(zhàn)演練——綜合管理用戶權(quán)限 372
13.6
疑難解惑 376
13.7
上機(jī)練練手 377
第14章 數(shù)據(jù)備份與恢復(fù) 378
14.1
數(shù)據(jù)備份 378
14.1.1 使用mysqldump命令備份 378
14.1.2
直接復(fù)制整個(gè)數(shù)據(jù)庫目錄 385
14.1.3
使用mysqlhotcopy工具快速備份 385
14.2
數(shù)據(jù)恢復(fù) 386
14.2.1
使用MySQL命令恢復(fù) 386
14.2.2
直接復(fù)制到數(shù)據(jù)庫目錄 387
14.2.3
mysqlhotcopy快速恢復(fù) 387
14.3
數(shù)據(jù)庫遷移 388
14.3.1
相同版本的MySQL數(shù)據(jù)庫之間的遷移 388
14.3.2
不同版本的MySQL數(shù)據(jù)庫之間的遷移 388
14.3.3
不同數(shù)據(jù)庫之間的遷移 389
14.4
表的導(dǎo)出和導(dǎo)入 389
14.4.1
使用SELECT…INTO OUTFILE導(dǎo)出文本文件 389
14.4.2
使用mysqldump命令導(dǎo)出文本文件 392
14.4.3
使用MySQL命令導(dǎo)出文本文件 395
14.4.4
使用LOAD DATA INFILE方式導(dǎo)入文本文件 398
14.4.5
使用mysqlimport命令導(dǎo)入文本文件 400
14.5
實(shí)戰(zhàn)演練——數(shù)據(jù)的備份與恢復(fù) 402
14.6
疑難解惑 407
14.7
上機(jī)練練手 408
第15章 MySQL日志 409
15.1
日志簡(jiǎn)介 409
15.2
二進(jìn)制日志 410
15.2.1
啟動(dòng)和設(shè)置二進(jìn)制日志 410
15.2.2
查看二進(jìn)制日志 411
15.2.3
刪除二進(jìn)制日志 413
15.2.4
使用二進(jìn)制日志恢復(fù)數(shù)據(jù)庫 415
15.2.5
暫時(shí)停止二進(jìn)制日志功能 416
15.3
錯(cuò)誤日志 416
15.3.1
啟動(dòng)和設(shè)置錯(cuò)誤日志 416
15.3.2
查看錯(cuò)誤日志 417
15.3.3
刪除錯(cuò)誤日志 418
15.4
通用查詢?nèi)罩? 418
15.4.1
啟動(dòng)和設(shè)置通用查詢?nèi)罩? 418
15.4.2
查看通用查詢?nèi)罩? 418
15.4.3
刪除通用查詢?nèi)罩? 419
15.5
慢查詢?nèi)罩?420
15.5.1
啟動(dòng)和設(shè)置慢查詢?nèi)罩? 420
15.5.2
查看慢查詢?nèi)罩? 420
15.5.3
刪除慢查詢?nèi)罩? 421
15.6
實(shí)戰(zhàn)演練——MySQL日志的綜合管理 421
15.7
疑難解惑 427
15.8
上機(jī)練練手 428
第16章 性能優(yōu)化 429
16.1
優(yōu)化簡(jiǎn)介 429
16.2
優(yōu)化查詢 430
16.2.1
分析查詢語句 430
16.2.2
索引對(duì)查詢速度的影響 433
16.2.3
使用索引查詢 434
16.2.4
優(yōu)化子查詢 437
16.3
優(yōu)化數(shù)據(jù)庫結(jié)構(gòu) 438
16.3.1
將字段很多的表分解成多個(gè)表 438
16.3.2
增加中間表 439
16.3.3
增加冗余字段 441
16.3.4
優(yōu)化插入記錄的速度 441
16.3.5
分析表、檢查表和優(yōu)化表 443
16.4
優(yōu)化MySQL服務(wù)器 445
16.4.1
優(yōu)化服務(wù)器硬件 445
16.4.2
優(yōu)化MySQL的參數(shù) 446
16.5
實(shí)戰(zhàn)演練——全面優(yōu)化MySQL服務(wù)器 447
16.6
疑難解惑 449
16.7
上機(jī)練練手 450
第17章 設(shè)計(jì)新聞發(fā)布系統(tǒng)的數(shù)據(jù)庫 451
17.1
系統(tǒng)概述 451
17.2
系統(tǒng)功能 452
17.3
數(shù)據(jù)庫設(shè)計(jì)和實(shí)現(xiàn) 453
17.3.1
設(shè)計(jì)表 453
17.3.2
設(shè)計(jì)索引 457
17.3.3
設(shè)計(jì)視圖 458
17.3.4
設(shè)計(jì)觸發(fā)器 459
17.4
案例總結(jié) 460