第一篇 關係數據庫設計
第1章 數據庫設計概述 2
1.1 數據庫概述 2
1.1.1 關係數據庫管理係統 2
1.1.2 關係數據庫 3
1.1.3 結構化查詢語言SQL 4
1.2 數據庫設計的相關知識 5
1.2.1 商業知識和溝通技能 5
1.2.2 數據庫設計輔助工具 5
1.2.3 “選課係統”概述 6
1.2.4 定義問題域 7
1.2.5 編碼規範 8
1.3 E—R圖 9
1.3.1 實體和屬性 9
1.3.2 關係 10
1.3.3 E—R圖的設計原則 12
1.4 關係數據庫設計 14
1.4.1 為每個實體建立一張數據庫錶 15
1.4.2 為每張錶定義一個主鍵 15
1.4.3 增加外鍵錶示一對多關係 16
1.4.4 建立新錶錶示多對多關係 18
1.4.5 為字段選擇閤適的數據類型 19
1.4.6 定義約束(constraint)條件 19
1.4.7 評價數據庫錶設計的質量 21
1.4.8 使用規範化減少數據冗餘 21
1.4.9 避免數據經常發生變化 25
習題 26
第二篇 MySQL基礎
第2章 MySQL基礎知識 30
2.1 MySQL概述 30
2.1.1 MySQL的特點 30
2.1.2 MySQL服務的安裝 32
2.1.3 MySQL服務的配置 34
2.1.4 啓動與停止MySQL服務 40
2.1.5 MySQL配置文件 41
2.1.6 MySQL客戶機 41
2.1.7 連接MySQL服務器 42
2.2 字符集以及字符序設置 44
2.2.1 字符集及字符序概念 44
2.2.2 MySQL字符集與字符序 45
2.2.3 MySQL字符集的轉換過程 46
2.2.4 MySQL字符集的設置 47
2.2.5 SQL腳本文件 48
2.3 MySQL數據庫管理 49
2.3.1 創建數據庫 49
2.3.2 查看數據庫 50
2.3.3 顯示數據庫結構 50
2.3.4 選擇當前操作的數據庫 51
2.3.5 刪除數據庫 51
2.4 MySQL錶管理 51
2.4.1 MyISAM和InnoDB存儲引擎 51
2.4.2 設置默認的存儲引擎 52
2.4.3 創建數據庫錶 53
2.4.4 顯示錶結構 54
2.4.5 錶記錄的管理 54
2.4.6 InnoDB錶空間 57
2.4.7 刪除錶 59
2.5 係統變量 59
2.5.1 全局係統變量與會話係統變量 59
2.5.2 查看係統變量的值 60
2.5.3 設置係統變量的值 62
2.6 MySQL數據庫備份和恢復 63
習題 64
第3章 MySQL錶結構的管理 66
3.1 MySQL數據類型 66
3.1.1 MySQL整數類型 66
3.1.2 MySQL小數類型 67
3.1.3 MySQL字符串類型 67
3.1.4 MySQL日期類型 68
3.1.5 MySQL復閤類型 71
3.1.6 MySQL二進製類型 72
3.1.7 選擇閤適的數據類型 72
3.2 創建錶 73
3.2.1 設置約束 74
3.2.2 設置自增型字段 78
3.2.3 其他選項的設置 78
3.2.4 創建“選課係統”數據庫錶 79
3.2.5 復製一個錶結構 80
3.3 修改錶結構 81
3.3.1 修改字段相關信息 81
3.3.2 修改約束條件 82
3.3.3 修改錶的其他選項 83
3.3.4 修改錶名 83
3.4 刪除錶 84
3.5 索引 84
3.5.1 理解索引 84
3.5.2 索引關鍵字的選取原則 87
3.5.3 索引與約束 88
3.5.4 創建索引 88
3.5.5 刪除索引 90
習題 90
第4章 錶記錄的更新操作 91
4.1 錶記錄的插入 91
4.1.1 使用insert語句插入新記錄 91
4.1.2 更新操作與字符集 94
4.1.3 關於自增型字段 94
4.1.4 批量插入多條記錄 95
4.1.5 使用insert
4.1.6 使用replace插入新記錄 96
4.2 錶記錄的修改 97
4.3 錶記錄的刪除 98
4.3.1 使用delete刪除錶記錄 98
4.3.2 使用truncate清空錶記錄 98
4.4 MySQL特殊字符序列 100
習題 102
第5章 錶記錄的檢索 103
5.1 select語句概述 103
5.1.1 使用select子句指定字段列錶 104
5.1.2 使用謂詞過濾記錄 105
5.1.3 使用from子句指定數據源 105
5.1.4 多錶連接 109
5.2 使用where子句過濾結果集 109
5.2.1 使用單一的條件過濾結果集 110
5.2.2 isNULL運算符 110
5.2.3 select語句與字符集 111
5.2.4 使用邏輯運算符 112
5.2.5 使用like進行模糊查詢 115
5.3 使用orderby子句對結果集排序 116
5.4 使用聚閤函數匯總結果集 117
5.5 使用groupby子句對記錄分組統計 118
5.5.1 groupby子句與聚閤函數 118
5.5.2 groupby子句與having子句 119
5.5.3 groupby子句與group_concat()函數 120
5.5.4 groupby子句與withrollup選項 120
5.6 閤並結果集 121
5.7 子查詢 122
5.7.1 子查詢與比較運算符 122
5.7.2 子查詢與in運算符 123
5.7.3 子查詢與exists邏輯運算符 124
5.7.4 子查詢與any運算符 125
5.7.5 子查詢與all運算符 126
5.8 選課係統綜閤查詢 126
5.9 使用正則錶達式模糊查詢 129
5.10 全文檢索 131
5.10.1 全文檢索的簡單應用 132
5.10.2 全文檢索方式 135
5.10.3 布爾檢索模式的復雜應用 135
5.10.4 MySQL全文檢索的注意事項 137
5.10.5 InnoDB錶的全文檢索 137
習題 138
第三篇 MySQL編程
第6章 MySQL編程基礎 140
6.1 MySQL編程基礎知識 140
6.1.1 常量 140
6.1.2 用戶自定義變量 142
6.1.3 運算符與錶達式 147
6.1.4 begin—end語句塊 149
6.1.5 重置命令結束標記 149
6.2 自定義函數 150
6.2.1 創建自定義函數的語法格式 150
6.2.2 函數的創建與調用 151
6.2.3 函數的維護 153
6.2.4 條件控製語句 154
6.2.5 循環語句 156
6.3 係統函數 160
6.3.1 數學函數 160
6.3.2 字符串函數 162
6.3.3 數據類型轉換函數 168
6.3.4 條件控製函數 169
6.3.5 係統信息函數 170
6.3.6 日期和時間函數 171
6.3.7 其他常用的MySQL函數 177
6.4 中文全文檢索的模擬實現 179
習題 181
第7章 視圖與觸發器 183
7.1 視圖 183
7.1.1 創建視圖 183
7.1.2 查看視圖的定義 184
7.1.3 視圖在“選課係統”中的應用 185
7.1.4 視圖的作用 186
7.1.5 刪除視圖 187
7.1.6 檢查視圖 187
7.1.7 local與cascade檢查視圖 188
7.2 觸發器 189
7.2.1 準備工作 190
7.2.2 使用觸發器實現檢查約束 191
7.2.3 使用觸發器維護冗餘數據 192
7.2.4 使用觸發器模擬外鍵級聯選項 193
7.2.5 查看觸發器的定義 194
7.2.6 刪除觸發器 195
7.2.7 使用觸發器的注意事項 195
7.3 臨時錶 196
7.3.1 臨時錶概述 196
7.3.2 臨時錶的創建、查看與刪除 196
7.3.3 “選課係統”中臨時錶的使用 197
7.3.4 使用臨時錶的注意事項 198
7.4 派生錶(derivedtable) 198
7.5 子查詢、視圖、臨時錶、派生錶 199
習題 200
第8章 存儲過程與遊標 201
8.1 存儲過程 201
8.1.1 創建存儲過程的語法格式 201
8.1.2 存儲過程的調用 202
8.1.3 “選課係統”的存儲過程 203
8.1.4 查看存儲過程的定義 206
8.1.5 刪除存儲過程 208
8.1.6 存儲過程與函數的比較 208
8.2 錯誤觸發條件和錯誤處理 209
8.2.1 自定義錯誤處理程序 209
8.2.2 自定義錯誤觸發條件 211
8.2.3 自定義錯誤處理程序說明 212
8.3 遊標 212
8.3.1 使用遊標 212
8.3.2 遊標在“選課係統”中的使用 213
8.4 預處理SQL語句 215
8.4.1 預處理SQL語句使用步驟 215
8.4.2 “選課係統”中預處理SQL語句的使用 216
8.4.3 預處理SQL語句的復雜應用 217
8.4.4 靜態SQL語句與預處理SQL語句 219
8.5 存儲程序的說明 219
習題 220
第9章 事務機製與鎖機製 221
9.1 事務機製 221
9.1.1 事務機製的必要性 221
9.1.2 關閉MySQL自動提交 222
9.1.3 迴滾 223
9.1.4 提交 224
9.1.5 事務 225
9.1.6 保存點 226
9.1.7 “選課係統”中的事務 229
9.2 鎖機製 231
9.2.1 鎖機製的必要性 231
9.2.2 MySQL鎖機製的基礎知識 232
9.2.3 MyISAM錶的錶級鎖 235
9.2.4 InnoDB錶的行級鎖 238
9.2.5 “選課係統”中的行級鎖 240
9.2.6 InnoDB錶的意嚮鎖 242
9.2.7 InnoDB行級鎖與索引之間的關係 243
9.2.8 間隙鎖與死鎖 245
9.2.9 死鎖與鎖等待 247
9.3 事務的ACID特性 249
9.3.1 事務的ACID特性 249
9.3.2 事務的隔離級彆與並發問題 250
9.3.3 設置事務的隔離級彆 251
9.3.4 使用間隙鎖避免幻讀現象 255
9.4 事務與鎖機製注意事項257
習題 257
第四篇 綜閤實訓
第10章 網上選課係統的開發 260
10.1 PHP預備知識 260
10.1.1 為何選用B/S結構以及PHP腳本語言 260
10.1.2 PHP腳本語言概述 261
10.1.3 PHP腳本程序的工作流程 262
10.1.4 Web服務器的部署 264
10.1.5 注意事項 266
10.2 軟件開發生命周期SDLC 267
10.3 網上選課係統的係統規劃 267
10.3.1 網上選課係統的目標 267
10.3.2 網上選課係統的可行性分析 268
10.3.3 網上選課係統的項目進度錶 268
10.3.4 網上選課係統的人員分工 269
10.4 網上選課係統的係統分析 269
10.4.1 網上選課係統的功能需求分析 270
10.4.2 網上選課係統的非功能需求分析 272
10.5 網上選課係統的係統設計 272
10.6 網上選課係統的係統實施 274
10.6.1 準備工作 274
10.6.2 製作PHP連接MySQL服務器函數 275
10.6.3 製作PHP權限係統函數 276
10.6.4 首頁index.php的開發 277
10.6.5 教師注冊模塊的開發 278
10.6.6 登錄模塊的開發 281
10.6.7 注銷模塊的開發 283
10.6.8 添加班級模塊的開發 283
10.6.9 學生注冊模塊的開發 284
10.6.10 密碼重置模塊 285
10.6.11 申報課程模塊 286
10.6.12 課程列錶顯示模塊 287
10.6.13 審核申報課程 289
10.6.14 取消已審核課程 290
10.6.15 瀏覽自己申報的課程 290
10.6.16 刪除課程 291
10.6.17 學生選修或者調換已經審核的課程 292
10.6.18 查看自己選修的課程 293
10.6.19 取消選修課程 294
10.6.20 查看課程的學生信息列錶 295
10.6.21 查看選修人數少於30人的課程信息 296
10.7 界麵設計與MVC模式 296
10.8 網上選課係統的測試 298
習題 299
第五篇 MySQL管理及維護
第11章 MySQL日誌與事件 302
11.1 MySQL日誌 302
11.1.1 數據皆需要緩存 302
11.1.2 MySQL錯誤日誌 303
11.1.3 MySQL普通查詢日誌 303
11.1.4 MySQL慢查詢日誌 304
11.1.5 MySQL慢查詢日誌的查看 305
11.2 二進製日誌 307
11.2.1 啓動二進製日誌 307
11.2.2 二進製日誌文件內容的查看 308
11.2.3 獲取當前的二進製日誌文件及偏移位置 310
11.2.4 使用二進製日誌恢復數據庫 310
11.2.5 與MySQL二進製日誌有關的參數 311
11.2.6 二進製日誌的清理 312
11.3 InnoDB事務日誌 312
11.4 日誌文件的備份 314
11.5 MySQL事件 314
11.5.1 創建MySQL事件 314
11.5.2 開啓MySQL事件調度器 316
11.5.3 查看MySQL事件的定義 316
11.5.4 刪除MySQL事件的定義 317
習題 317
第12章 MySQL備份與恢復 319
12.1 備份與恢復概述 319
12.1.1 防止數據丟失的方法 319
12.1.2 數據備份概述 320
12.2 邏輯備份與邏輯恢復 321
12.2.1 使用select
12.2.2 恢復錶數據 322
12.2.3 使用mysqldump備份數據庫 325
12.2.4 邏輯備份綜閤示例 326
12.2.5 二進製日誌恢復數據庫的綜閤示例 327
12.3 物理備份與熱備份 329
12.3.1 物理備份的所需文件 329
12.3.2 MyISAM錶物理備份、熱備份工具 329
12.3.3 InnoDB錶物理備份、熱備份工具 330
12.3.4 Xtrabackup的工作原理 331
12.3.5 使用Xtrabackup實現完全備份與增量備份 333
12.3.6 使用Xtrabackup實現數據庫恢復 333
12.4 MySQL復製(replication) 336
12.4.1 MySQL復製的實現原理 337
12.4.2 MySQL復製的實現 337
12.4.3 復製綫程的狀態 339
12.4.4 與復製有關的文件 341
12.4.5 復製的配置 342
12.4.6 MySQL復製模式 344
12.4.7 自增型字段衝突問題 345
12.4.8 事件損壞 345
12.4.9 小結 346
12.5 備份策略 346
習題 347
第13章 MySQL安全管理 348
13.1 MySQL安全管理 348
13.2 MySQL賬戶與權限錶 350
13.2.1 grant命令語法格式 350
13.2.2 創建MySQL服務實例級彆的賬戶 351
13.2.3 創建MySQL數據庫級彆的賬戶 353
13.2.4 創建MySQL錶級彆的賬戶 356
13.2.5 創建MySQL字段級彆的賬戶 357
13.2.6 創建MySQL存儲程序級彆的賬戶 359
13.2.7 注意事項 360
13.2.8 host權限錶 361
13.3 MySQL賬戶管理 362
13.3.1 使用createuser創建MySQL賬戶 362
13.3.2 查看MySQL賬戶信息 362
13.3.3 刪除已有賬戶 363
13.3.4 修改已有賬戶的信息 363
13.3.5 MySQL賬戶的資源次數限製 364
13.3.6 使用更新語句修改MySQL賬戶信息 365
13.3.7 權限的生效時機 365
13.4 MySQL安全管理的注意事項 365
13.4.1 MySQL賬戶名重名問題 366
13.4.2 root賬號密碼丟失問題 368
13.4.3 消除MySQL安全隱患 368
13.4.4 MySQL安全管理的其他注意事項 370
習題 371
第14章 MySQL優化 372
14.1 基礎知識 372
14.1.1 影響數據庫係統性能的組件 372
14.1.2 參數信息與狀態信息 373
14.1.3 緩存機製 373
14.1.4 緩存的分類 374
14.1.5 超時 375
14.2 MySQL連接的優化 377
14.3 緩存的優化 380
14.3.1 查詢緩存QueryCache 380
14.3.2 結果集緩存 382
14.3.3 排序緩存 382
14.3.4 join連接緩存 384
14.3.5 錶緩存Cache與錶結構定義緩存Cache 385
14.3.6 錶掃描緩存buffer 387
14.3.7 MyISAM索引緩存buffer 388
14.3.8 日誌緩存 390
14.3.9 預讀機製 391
14.3.10 延遲更新 393
14.3.11 內存錶與臨時錶 396
14.4 InnoDB優化 398
14.4.1 InnoDB緩存池 398
14.4.2 InnoDB緩存池內部結構 399
14.4.3 InnoDB緩存池預熱 400
14.4.4 InnoDB緩存池的狀態信息 401
14.4.5 常見的InnoDB參數設置 402
14.4.6 InnoDB實時監控 402
14.5 優化錶 403
14.5.1 優化錶結構 403
14.5.2 錶的拆分 403
14.5.3 分區 404
14.5.4 錶分析與錶檢查 406
14.5.5 NULL值對統計信息的影響 409
14.5.6 記錄的格式 409
14.6 SQL語句優化 411
14.6.1 瞭解SQL的執行頻率 411
14.6.2 定位執行效率較低的SQL語句 413
14.6.3 分析select語句 413
14.6.4 索引與select語句 416
14.6.5 分頁與select 418
14.6.6 SQL語句其他注意事項 420
14.6.7 profiling性能分析工具 421
14.7 鎖資源的優化 422
14.7.1 錶級鎖資源競爭 422
14.7.2 錶級鎖資源競爭的解決方案 422
14.7.3 行級鎖的資源競爭 423
14.7.4 行級鎖資源競爭的解決方案 423
14.7.5 禁用InnoDB間隙鎖 424
14.7.6 事務監控與鎖監控 424
14.7.7 元數據鎖metadatalocks 425
第15章 MySQLCluster 427
15.1 MySQLCluster簡介 427
15.1.1 MySQL集群的組成 427
15.1.2 MySQL集群架構 429
15.2 MySQLCluster環境搭建 429
15.2.1 準備工作 429
15.2.2 數據節點的配置 430
15.2.3 SQL節點的配置 431
15.2.4 管理節點的配置 433
15.2.5 MySQL集群的啓動 434
15.2.6 集群測試 437
參考文獻 439
· · · · · · (
收起)