第1篇MySQL數據庫基礎第1章初識MySQL 3
1.1 關于數據庫的基本概念 4
1.1.1 數據庫 4
1.1.2 表 4
1.1.3 數據類型 5
1.1.4 主鍵 5
1.2 數據庫技術構成 5
1.2.1 數據庫系統 5
1.2.2 SQL語言 6
1.2.3 數據庫訪問技術 7
1.3 MySQL簡介 8
1.3.1 客戶機-服務器軟件 8
1.3.2 MySQL的版本 8
1.3.3 MySQL的優勢 9
1.3.4 MySQL5.6的新功能 10
1.4 MySQL的工具 10
1.4.1 MySQL的命令行實用工具 11
1.4.2 MySQLWorkbench 11
1.5 高手甜點 12
1.6 跟我學上機 13
第2章MySQL的安裝與環境配置 15
2.1 Windows系統中安裝與配置MySQL 16
2.1.1 安裝MySQL 16
2.1.2 配置MySQL 21
2.2 啟動服務并登錄MySQL數據庫 26
2.2.1 查看和啟動MySQL服務 26
2.2.2 登錄MySQL數據庫 27
2.2.3 配置Path變量 31
2.3 Linux系統中安裝與配置MySQL 32
2.3.1 Linux操作系統下的MySQL
版本介紹 32
2.3.2 安裝和配置MySQL的
RPM包 34
2.3.3 安裝和配置MySQL的源碼包 38
2.4 MySQL常用圖形管理工具 39
2.5 高手甜點 40
2.6 跟我學上機 40
第2篇MySQL數據庫的基本操作
第3章操作數據庫 43
3.1 創建數據庫 44
3.2 刪除數據庫 45
3.3 數據庫存儲引擎 45
3.3.1 InnoDB存儲引擎 47
3.3.2 MyISAM存儲引擎 48
3.3.3 MEMORY存儲引擎 48
3.3.4 存儲引擎的選擇 49
3.4 綜合實例——數據庫的創建和刪除 49
3.5 高手甜點 51
3.6 跟我學上機 52
第4章創建、修改和刪除數據表 53
4.1 創建數據表 54
4.1.1 創建表的語法形式 54
4.1.2 使用主鍵約束 55
4.1.3 使用外鍵約束 56
4.1.4 使用非空約束 57
4.1.5 使用唯一性約束 58
4.1.6 使用默認約束 58
4.1.7 設置表的屬性值自動增加 59
4.2 查看數據表結構 60
4.2.1 查看表的基本結構語句
DESCRIBE 60
4.2.2 查看表的詳細結構語句SHOW
CREATETABLE 61
4.3 修改數據表 62
4.3.1 修改表名 62
4.3.2 修改字段的數據類型 63
4.3.3 修改字段名 64
4.3.4 添加字段 65
4.3.5 刪除字段 67
4.3.6 修改字段的排列位置 68
4.3.7 更改表的存儲引擎 69
4.3.8 刪除表的外鍵約束 70
4.4 刪除數據表 71
4.4.1 刪除沒有被關聯的表 72
4.4.2 刪除被其他表關聯的主表 72
4.5 綜合實例——數據表的基本操作 74
4.6 高手甜點 81
4.7 跟我學上機 82
第5章數據類型和運算符 85
5.1 MySQL數據類型介紹 86
5.1.1 整數類型 86
5.1.2 浮點數類型和定點數類型 88
5.1.3 日期與時間類型 89
5.1.4 字符串類型 100
5.1.5 二進制類型 105
5.2 選擇數據類型的方法 108
5.3 常見運算符介紹 109
5.3.1運算符概述 109
5.3.2 算術運算符 110
5.3.3 比較運算符 111
5.3.4邏輯運算符 119
5.3.5 位運算符 121
5.3.6 運算符的優先級 124
5.4 綜合實例——運算符的使用 125
5.5 高手甜點 127
5.6 跟我學上機 128
第6章索引的操作 129
6.1 索引簡介 130
6.1.1索引的含義和特點 130
6.1.2索引的分類 130
6.1.3索引的設計原則 131
6.2 創建索引 132
6.2.1 創建表的時候創建索引 132
6.2.2 在已有的表上創建索引 137
6.3 刪除索引 144
6.4 綜合實例——創建索引 145
6.5 高手甜點 148
6.6 跟我學上機 148
第7章視圖的操作 151
7.1 視圖概述 152
7.1.1 視圖的含義 152
7.1.2 視圖的作用 153
7.2 創建視圖 153
7.2.1 創建視圖的語法形式 153
7.2.2 在單表上創建視圖 154
7.2.3 在多表上創建視圖 155
7.3 查看視圖 156
7.3.1 用DESCRIBE語句查看視圖的
基本信息 156
7.3.2 用SHOWTABLESTATUS語句
查看視圖的基本信息 157
7.3.3 用SHOWCREATEVIEW語句
查看視圖的詳細信息 158
7.3.4 在views表中查看視圖的詳細
信息 158
7.4 修改視圖 160
7.4.1 用CREATEORREPLACEVIEW
語句修改視圖 160
7.4.2 用ALTER語句修改視圖 161
7.5 更新視圖 161
7.6 刪除視圖 164
7.7 綜合實例——視圖應用 165
7.8 高手甜點 172
7.9 跟我學上機 173
第3篇SQL查詢語句
第8章插入、更新與刪除數據 177
8.1 插入數據 178
8.1.1 為表的所有字段插入數據 178
8.1.2 為表的指定字段插入數據 180
8.1.3 同時插入多條記錄 181
8.1.4 將查詢結果插入表中 183
8.2 更新數據 184
8.3 刪除數據 186
8.4 綜合實例——記錄的插入、更新
和刪除 188
8.5 高手甜點 192
8.6 跟我學上機 193
第9章MySQL函數 195
9.1 MySQL中的函數分類 196
9.2 數學函數 196
9.2.1 絕對值函數ABS(x)和返回
圓周率的函數PI() 196
9.2.2 平方根函數SQRT(x)和求余函數
MOD(x,y) 197
9.2.3 獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x) 197
9.2.4 獲取隨機數的函數RAND()
和RAND(x) 198
9.2.5 四舍五入函數ROUND(x)、
ROUND(x,y)和
TRUNCATE(x,y) 198
9.2.6 符號函數SIGN(x) 200
9.2.7 冪運算函數POW(x,y)、
POWER(x,y)和EXP(x) 200
9.2.8 對數運算函數LOG(x)和
LOG10(x) 201
9.2.9 角度與弧度相互轉換的函數
RADIANS(x)和DEGREES(x) 201
9.2.10 正弦函數SIN(x)和反正弦
函數ASIN(x) 202
9.2.11 余弦函數COS(x)和反余弦函數
ACOS(x) 202
9.2.12 正切函數、反正切函數和余切
函數 203
9.3 字符串函數 204
9.3.1 計算字符串中字符數的函數
和字符串長度的函數 204
9.3.2 合并字符串函數CONCAT(s1,s2,…)、
CONCAT_WS(x,s1,s2,…) 204
9.3.3 替換字符串的函數
INSERT(s1,x,len,s2) 205
9.3.4 字母大小寫轉換函數 206
9.3.5 獲取指定長度字符串的函數
LEFT(s,n)和RIGHT(s,n) 206
9.3.6 填充字符串的函數LPAD(s1,len,s2)
和RPAD(s1,len,s2) 207
9.3.7 刪除空格的函數LTRIM(s)、
RTRIM(s)和TRIM(s) 208
9.3.8 刪除指定字符串的函數TRIM
(s1FROMs) 208
9.3.9 重復生成字符串的函數
REPEAT(s,n) 209
9.3.10 空格函數SPACE(n)和替換函數
REPLACE(s,s1,s2) 209
9.3.11 比較字符串大小的函數
STRCMP(s1,s2) 210
9.3.12 獲取子串的函數SUBSTRING(s,n,len)
和MID(s,n,len) 210
9.3.13 匹配子串開始位置的函數 211
9.3.14 字符串逆序的函數
REVERSE(s) 211
9.3.15 返回指定位置的字符串的函數
ELT(N,字符串1,字符串2,字符
串3,...,字符串N) 212
9.3.16 返回指定字符串位置的函數
FIELD(s,s1,s2,…) 212
9.3.17 返回子串位置的函數
FIND_IN_SET(s1,s2) 212
9.3.18 選取字符串的函數
MAKE_SET(x,s1,s2,…) 213
9.4 日期和時間函數 213
9.4.1 獲取當前日期的函數和獲取當前
時間的函數 214
9.4.2 獲取當前日期和時間的函數 214
9.4.3 UNIX時間戳函數 215
9.4.4 返回UTC日期的函數和返回
UTC時間的函數 215
9.4.5 獲取月份的函數MONTH(date)
和MONTHNAME(date) 216
9.4.6 獲取星期的函數DAYNAME(d)、
DAYOFWEEK(d)和
WEEKDAY(d) 216
9.4.7 獲取星期數的函數WEEK(d)
和WEEKOFYEAR(d) 217
9.4.8 獲取天數的函數DAYOFYEAR(d)
和DAYOFMONTH(d) 218
9.4.9 獲取年份、季度、小時、分鐘和
秒鐘的函數 219
9.4.10 獲取日期的指定值的函數
EXTRACT(typeFROMdate) 220
9.4.11 時間和秒鐘轉換的函數 220
9.4.12 計算日期和時間的函數 221
9.4.13 格式化日期和時間的函數 224
9.5 條件判斷函數 227
9.5.1 IF(expr,v1,v2)函數 227
9.5.2 IFNULL(v1,v2)函數 227
9.5.3 CASE函數 228
9.6 系統信息函數 229
9.6.1 獲取MySQL版本號、連接數和
數據庫名的函數 229
9.6.2 獲取用戶名的函數 231
9.6.3 獲取字符串的字符集和排序方式
的函數 231
9.6.4 獲取最后一個自動生成的ID值
的函數 232
9.7 加密和解密函數 234
9.7.1 加密函數PASSWORD(str) 234
9.7.2 加密函數MD5(str) 234
9.7.3 加密函數ENCODE
(str,pswd_str) 234
9.7.4 解密函數DECODE
(crypt_str,pswd_str) 235
9.8 其他函數 235
9.8.1 格式化函數FORMAT(x,n) 235
9.8.2 不同進制的數字進行轉換的
函數 236
9.8.3 IP地址與數字相互轉換的
函數 236
9.8.4 加鎖函數和解鎖函數 237
9.8.5 重復執行指定操作的函數 238
9.8.6 改變字符集的函數 238
9.8.7 改變數據類型的函數 239
9.9 綜合實例——MySQL函數的使用 239
9.10 高手甜點 242
9.11 跟我學上機 243
第10章查詢數據 245
10.1 基本查詢語句 246
10.2 單表查詢 248
10.2.1 查詢所有字段 248
10.2.2 查詢指定字段 249
10.2.3 查詢指定記錄 250
10.2.4 帶IN關鍵字的查詢 252
10.2.5 帶BETWEENAND的范圍
查詢 254
10.2.6 帶LIKE的字符匹配查詢 255
10.2.7 查詢空值 256
10.2.8 帶AND的多條件查詢 258
10.2.9 帶OR的多條件查詢 259
10.2.10 查詢結果不重復 260
10.2.11 對查詢結果排序 261
10.2.12 分組查詢 264
10.2.13 使用LIMIT限制查詢結果的
數量 269
10.3 使用集合函數查詢 270
10.3.1 COUNT()函數 271
10.3.2 SUM()函數 272
10.3.3 AVG()函數 273
10.3.4 MAX()函數 274
10.3.5 MIN()函數 275
10.4 連接查詢 276
10.4.1 內連接查詢 276
10.4.2 外連接查詢 279
10.4.3 復合條件連接查詢 281
10.5 子查詢 282
10.5.1 帶ANY、SOME關鍵字的
子查詢 282
10.5.2 帶ALL關鍵字的子查詢 283
10.5.3 帶EXISTS關鍵字的子查詢 283
10.5.4 帶IN關鍵字的子查詢 285
10.5.5 帶比較運算符的子查詢 286
10.6 合并查詢結果 288
10.7 為表和字段取別名 290
10.7.1 為表取別名 290
10.7.2 為字段取別名 292
10.8 使用正則表達式查詢 293
10.8.1 查詢以特定字符或字符串開頭
的記錄 294
10.8.2 查詢以特定字符或字符串結尾
的記錄 295
10.8.3 替代字符串中的任意一個
字符 295
10.8.4 匹配多個字符 296
10.8.5 匹配指定字符串 297
10.8.6 匹配指定字符中的任意一個 298
10.8.7 匹配指定字符以外的字符 299
10.8.8 指定字符串連續出現的次數 299
10.9 綜合實例——數據表查詢操作 300
10.10 高手甜點 307
10.11 跟我學上機 308
第11章存儲過程和函數 309
11.1 創建存儲過程和函數 310
11.1.1 創建存儲過程 310
11.1.2 創建存儲函數 312
11.1.3 變量的使用 313
11.1.4 定義條件和處理程序 314
11.1.5 光標的使用 317
11.1.6 流程控制的使用 318
11.2 調用存儲過程和函數 322
11.2.1 調用存儲過程 323
11.2.2 調用存儲函數 323
11.3 查看存儲過程和函數 324
11.3.1 查看存儲過程和函數的狀態 324
11.3.2 查看存儲過程和函數的定義 325
11.3.3 查看存儲過程和函數的信息 326
11.4 修改存儲過程和函數 327
11.5 刪除存儲過程和函數 329
11.6 綜合實例——綜合應用存儲過程
和函數 329
11.7 高手甜點 332
11.8 跟我學上機 333
第12章MySQL觸發器 335
12.1 創建觸發器 336
12.1.1 創建只有一個執行語句的
觸發器 336
12.1.2 創建有多個執行語句的
觸發器 337
12.2 查看觸發器 339
12.2.1 用SHOWTRIGGERS語句
查看觸發器信息 339
12.2.2 在triggers表中查看觸發器
信息 341
12.3 觸發器的使用 342
12.4 刪除觸發器 343
12.5 綜合實例——觸發器的應用 343
12.6 高手甜點 345
12.7 跟我學上機 346
第4篇MySQL數據庫高級管理
第13章MySQL安全性機制 349
13.1 權限表 350
13.1.1user表 350
13.1.2db表和host表 352
13.1.3tables_priv表和
columns_priv表 354
13.1.4procs_priv表 356
13.2 賬戶管理 356
13.2.1 登錄和退出MySQL服務器 356
13.2.2 新建普通用戶 358
13.2.3 刪除普通用戶 361
13.2.4 root用戶修改自己的密碼 363
13.2.5 root用戶修改普通用戶密碼 364
13.2.6 普通用戶修改密碼 365
13.2.7 root用戶密碼丟失的解決
辦法 366
13.3 權限管理 367
13.3.1 MySQL的各種權限 368
13.3.2 授權 370
13.3.3 收回權限 372
13.3.4 查看權限 373
13.4 訪問控制 373
13.4.1 連接核實階段 374
13.4.2 請求核實階段 374
13.5 綜合實例——綜合管理用戶權限 375
13.6 高手甜點 378
13.7 跟我學上機 378
第14章數據備份與還原 381
14.1 數據備份 382
14.1.1 使用mysqldump命令備份 382
14.1.2 直接復制整個數據庫目錄 388
14.1.3 使用mysqlhotcopy工具快速
備份 388
14.2 數據還原 389
14.2.1 使用mysql命令還原 389
14.2.2 直接復制到數據庫目錄 390
14.2.3 mysqlhotcopy快速恢復 390
14.3 數據庫遷移 391
14.3.1 相同版本的MySQL數據庫
之間的遷移 391
14.3.2 不同版本的MySQL數據庫
之間的遷移 391
14.3.3 不同數據庫之間的遷移 392
14.4 表的導出和導入 392
14.4.1 用SELECT…INTOOUTFILE
導出文本文件 392
14.4.2 用mysqldump命令導出文本
文件 395
14.4.3 用mysql命令導出文本文件 397
14.4.4 使用LOADDATAINFILE
方式導入文本文件 400
14.4.5 使用mysqlimport命令導入
文本文件 402
14.5 綜合實例——數據的備份與恢復 404
14.6 高手甜點 408
14.7 跟我學上機 409
第15章管理MySQL日志 411
15.1 日志簡介 412
15.2 二進制日志 412
15.2.1 啟動和設置二進制日志 412
15.2.2 查看二進制日志 413
15.2.3 刪除二進制日志 415
15.2.4 使用二進制日志還原數據庫 417
15.2.5 暫時停止記錄二進制日志的
功能 417
15.3 錯誤日志 418
15.3.1 啟動和設置錯誤日志 418
15.3.2 查看錯誤日志 418
15.3.3 刪除錯誤日志 419
15.4 通用查詢日志 420
15.4.1 啟動和設置通用查詢日志 420
15.4.2 查看通用查詢日志 420
15.4.3 刪除通用查詢日志 420
15.5 慢查詢日志 421
15.5.1 啟動和設置慢查詢日志 421
15.5.2 查看慢查詢日志 422
15.5.3 刪除慢查詢日志 422
15.6 綜合實例——MySQL日志的綜合
管理 422
15.7 高手甜點 428
15.8 跟我學上機 428
第16章MySQL性能的優化 429
16.1 優化簡介 430
16.2 優化查詢 430
16.2.1 分析查詢語句 431
16.2.2 索引對查詢速度的影響 433
16.2.3 使用索引查詢 434
16.2.4 優化子查詢 436
16.3 優化數據庫結構 437
16.3.1 將字段較多的表分解成
多個表 437
16.3.2 增加中間表 438
16.3.3 增加冗余字段 440
16.3.4優化插入記錄的速度 440
16.3.5分析、檢查和優化表 442
16.4 優化MySQL服務器 443
16.4.1 優化服務器硬件 444
16.4.2 優化MySQL的參數 444
16.5 綜合實例——全面優化MySQL
服務器 445
16.6 高手甜點 447
16.7 跟我學上機 448
第17章MySQL的高級特性 449
17.1 MySQL查詢緩存 450
17.1.1 認識查詢緩存 450
17.1.2 監控和維護查詢緩存 455
17.1.3 檢查緩存命中 456
17.1.4 優化查詢緩存 457
17.2 合并表和分區表 458
17.2.1 合并表 458
17.2.2 分區表 460
17.3 事務控制 469
17.4 MySQL分布式事務 473
17.4.1 分布式事務的原理 473
17.4.2 分布式事務的語法 473
17.5 高手甜點 474
17.6 跟我學上機 475
第18章使用MySQLWorkbench
管理數據庫 477
18.1 MySQLWorkbench簡介 478
18.1.1 MySQLWorkbench的優勢 478
18.1.2 安裝MySQLWorkbench 478
18.2 SQLDevelopment的基本操作 480
18.2.1 創建數據庫連接 480
18.2.2 創建和刪除新的數據庫 482
18.2.3 創建和刪除新的數據表 483
18.2.4 添加、修改表記錄 486
18.2.5 查詢表記錄 487
18.2.6 修改表結構 488
18.3 DataModeling的基本操作 489
18.3.1 建立ER模型 489
18.3.2 導入ER模型 493
18.4 ServerAdministration的基本操作 495
18.4.1 管理MySQL用戶 495
18.4.2 備份MySQL數據庫 498
18.4.3 還原MySQL數據庫 500
18.5 高手甜點 501
18.6 跟我學上機 501
第5篇MySQL開發與案例設計
第19章Java訪問MySQL數據庫 505
19.1 JDBC概述 506
19.2 下載與安裝MySQLConnector/J 506
19.2.1 下載MySQLConnector/J 506
19.2.2 安裝MySQLConnector/J
驅動 507
19.3 Java連接MySQL數據庫 507
19.4 Java操作MySQL數據庫 509
19.4.1 創建Statement對象 509
19.4.2 使用SELECT語句查詢數據 509
19.4.3 插入、更新和刪除數據 510
19.4.4 執行任意SQL語句 510
19.4.5 關閉創建的對象 511
19.5 Java備份和還原MySQL數據庫 512
19.5.1 備份MySQL數據庫 512
19.5.2 還原MySQL數據庫 512
19.6 高手甜點 512
19.7 跟我學上機 513
第20章PHP操作MySQL數據庫 515
20.1 PHP訪問MySQL數據庫的一般
步驟 516
20.2 連接數據庫前的準備工作 516
20.2.1 在Windows系統下配置
PHP 516
20.2.2 在Linux系統下配置PHP 517
20.3 PHP操作MySQL數據庫所用的
函數 517
20.3.1 通過mysqli類庫訪問MySQL
數據庫 517
20.3.2 使用mysqli_connect()函數連接
MySQL服務器 519
20.3.3 使用mysqli_select_db()函數
選擇數據庫文件 520
20.3.4 使用mysqli_query()函數
執行SQL語句 520
20.3.5 使用mysqli_fetch_assoc()函數
從數組結果集中獲取信息 521
20.3.6 使用mysqli_fetch_object()函數
從結果中獲取一行作為對象 521
20.3.7 使用mysqli_num_rows()函數
獲取查詢結果集中的記錄數 521
20.3.8 使用mysqli_free_result()函數
釋放資源 522
20.3.9 使用mysqli_close()函數關閉
連接 522
20.4 綜合實例1——使用insert語句動態
添加用戶信息 522
20.5 綜合實例2——使用select語句查詢
數據信息 524
20.6 高手甜點 526
20.7 跟我學上機 527
第21章論壇管理系統數據庫設計 529
21.1 系統概述 530
21.2 系統功能 530
21.3 數據庫設計和實現 531
21.3.1 設計方案圖表 531
21.3.2 設計表 533
21.3.3 設計索引 537
21.3.4 設計視圖 538
21.3.5 設計觸發器 538
第22章新聞發布系統數據庫設計 541
22.1 系統概述 542
22.2 系統功能 542
22.3 數據庫設計和實現 543
22.3.1 設計表 543
22.3.2 設計索引 548
22.3.3 設計視圖 549
22.3.4 設計觸發器 549