關(guān)于我們
書單推薦
新書推薦
|
MySQL 數(shù)據(jù)庫(kù)應(yīng)用案例課堂
本書從零基礎(chǔ)講解起步,用實(shí)例引導(dǎo)讀者深入學(xué)習(xí),采取“數(shù)據(jù)庫(kù)基礎(chǔ)→數(shù)據(jù)庫(kù)的基本操作→SQL查詢語(yǔ)句→數(shù)據(jù)庫(kù)高級(jí)管理→項(xiàng)目開發(fā)與案例設(shè)計(jì)”的講解模式,深入淺出地講解MySQL的各項(xiàng)技術(shù)及實(shí)戰(zhàn)技能。本書共分5篇,第1篇主要講解MySQL的基礎(chǔ)知識(shí),MySQL的安裝與環(huán)境配置等;第2篇主要講解操作數(shù)據(jù)庫(kù),創(chuàng)建、修改和刪除數(shù)據(jù)表,數(shù)據(jù)類型和運(yùn)算符,索引的操作,視圖的操作等;第3篇主要講解插入、更新與刪除數(shù)據(jù),MySQL函數(shù),查詢數(shù)據(jù),存儲(chǔ)過(guò)程和函數(shù),MySQL觸發(fā)器等;第4篇主要講解MySQL安全性機(jī)制,MySQL數(shù)據(jù)備份與還原,管理MySQL日志,MySQL性能的優(yōu)化,MySQL的高級(jí)特性和使用MySQL Workbench管理數(shù)據(jù)庫(kù);第5篇主要講解Java訪問(wèn)MySQL數(shù)據(jù)庫(kù),PHP操作MySQL數(shù)據(jù)庫(kù),論壇管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)、新聞發(fā)布系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)。本書附贈(zèng)光盤中包含豐富的資源,包括MySQL案例源代碼、教學(xué)幻燈片、精品教學(xué)視頻、MySQL常用命令速查手冊(cè)、數(shù)據(jù)庫(kù)工程師職業(yè)規(guī)劃、數(shù)據(jù)庫(kù)工程師面試技巧、數(shù)據(jù)庫(kù)工程師常見(jiàn)面試題、MySQL常見(jiàn)錯(cuò)誤及解決方案、MySQL數(shù)據(jù)庫(kù)經(jīng)驗(yàn)及技巧大匯總等。本書適合任何想學(xué)習(xí)MySQL的人員,無(wú)論您是否從事計(jì)算機(jī)相關(guān)行業(yè),無(wú)論您是否接觸過(guò)MySQL,通過(guò)學(xué)習(xí)本書均可快速掌握MySQL的管理方法和技巧。
本書從零基礎(chǔ)講解起步,用實(shí)例引導(dǎo)讀者深入學(xué)習(xí),采取“數(shù)據(jù)庫(kù)基礎(chǔ)→數(shù)據(jù)庫(kù)的基本操作→SQL查詢語(yǔ)句→數(shù)據(jù)庫(kù)高級(jí)管理→項(xiàng)目開發(fā)與案例設(shè)計(jì)”的講解模式,深入淺出地講解MySQL的各項(xiàng)技術(shù)及實(shí)戰(zhàn)技能。本書共分5篇,第1篇主要講解MySQL的基礎(chǔ)知識(shí),MySQL的安裝與環(huán)境配置等;第2篇主要講解操作數(shù)據(jù)庫(kù),創(chuàng)建、修改和刪除數(shù)據(jù)表,數(shù)據(jù)類型和運(yùn)算符,索引的操作,視圖的操作等;第3篇主要講解插入、更新與刪除數(shù)據(jù),MySQL函數(shù),查詢數(shù)據(jù),存儲(chǔ)過(guò)程和函數(shù),MySQL觸發(fā)器等;第4篇主要講解MySQL安全性機(jī)制,MySQL數(shù)據(jù)備份與還原,管理MySQL日志,MySQL性能的優(yōu)化,MySQL的高級(jí)特性和使用MySQL Workbench管理數(shù)據(jù)庫(kù);第5篇主要講解Java訪問(wèn)MySQL數(shù)據(jù)庫(kù),PHP操作MySQL數(shù)據(jù)庫(kù),論壇管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)、新聞發(fā)布系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)。本書附贈(zèng)光盤中包含豐富的資源,包括MySQL案例源代碼、教學(xué)幻燈片、精品教學(xué)視頻、MySQL常用命令速查手冊(cè)、數(shù)據(jù)庫(kù)工程師職業(yè)規(guī)劃、數(shù)據(jù)庫(kù)工程師面試技巧、數(shù)據(jù)庫(kù)工程師常見(jiàn)面試題、MySQL常見(jiàn)錯(cuò)誤及解決方案、MySQL數(shù)據(jù)庫(kù)經(jīng)驗(yàn)及技巧大匯總等。本書適合任何想學(xué)習(xí)MySQL的人員,無(wú)論您是否從事計(jì)算機(jī)相關(guān)行業(yè),無(wú)論您是否接觸過(guò)MySQL,通過(guò)學(xué)習(xí)本書均可快速掌握MySQL的管理方法和技巧。
目 錄
第1篇 MySQL數(shù)據(jù)庫(kù)基礎(chǔ) 第1章 初識(shí)MySQL3 1.1 關(guān)于數(shù)據(jù)庫(kù)的基本概念4 1.1.1 數(shù)據(jù)庫(kù)4 1.1.2 表4 1.1.3 數(shù)據(jù)類型5 1.1.4 主鍵5 1.2 數(shù)據(jù)庫(kù)技術(shù)構(gòu)成5 1.2.1 數(shù)據(jù)庫(kù)系統(tǒng)5 1.2.2 SQL語(yǔ)言6 1.2.3 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)7 1.3 MySQL簡(jiǎn)介8 1.3.1 客戶機(jī)-服務(wù)器軟件8 1.3.2 MySQL的版本8 1.3.3 MySQL的優(yōu)勢(shì)9 1.3.4 MySQL 5.6的新功能10 1.4 MySQL的工具10 1.4.1 MySQL的命令行實(shí)用工具11 1.4.2 MySQL Workbench11 1.5 高手甜點(diǎn)12 1.6 跟我學(xué)上機(jī)13 第2章 MySQL的安裝與環(huán)境配置15 2.1 Windows系統(tǒng)中安裝與配置MySQL16 2.1.1 安裝MySQL16 2.1.2 配置MySQL21 2.2 啟動(dòng)服務(wù)并登錄MySQL數(shù)據(jù)庫(kù)26 2.2.1 查看和啟動(dòng)MySQL服務(wù)26 2.2.2 登錄MySQL數(shù)據(jù)庫(kù)27 2.2.3 配置Path變量31 2.3 Linux系統(tǒng)中安裝與配置MySQL32 2.3.1 Linux操作系統(tǒng)下的MySQL 版本介紹32 2.3.2 安裝和配置MySQL的 RPM包34 2.3.3 安裝和配置MySQL的源碼包38 2.4 MySQL常用圖形管理工具39 2.5 高手甜點(diǎn)40 2.6 跟我學(xué)上機(jī)40 第2篇 MySQL數(shù)據(jù)庫(kù)的基本操作 第3章 操作數(shù)據(jù)庫(kù)43 3.1 創(chuàng)建數(shù)據(jù)庫(kù)44 3.2 刪除數(shù)據(jù)庫(kù)45 3.3 數(shù)據(jù)庫(kù)存儲(chǔ)引擎45 3.3.1 InnoDB存儲(chǔ)引擎47 3.3.2 MyISAM存儲(chǔ)引擎48 3.3.3 MEMORY存儲(chǔ)引擎48 3.3.4 存儲(chǔ)引擎的選擇49 3.4 綜合實(shí)例——數(shù)據(jù)庫(kù)的創(chuàng)建和刪除49 3.5 高手甜點(diǎn)51 3.6 跟我學(xué)上機(jī)52 第4章 創(chuàng)建、修改和刪除數(shù)據(jù)表53 4.1 創(chuàng)建數(shù)據(jù)表54 4.1.1 創(chuàng)建表的語(yǔ)法形式54 4.1.2 使用主鍵約束55 4.1.3 使用外鍵約束56 4.1.4 使用非空約束57 4.1.5 使用唯一性約束58 4.1.6 使用默認(rèn)約束58 4.1.7 設(shè)置表的屬性值自動(dòng)增加59 4.2 查看數(shù)據(jù)表結(jié)構(gòu)60 4.2.1 查看表的基本結(jié)構(gòu)語(yǔ)句 DESCRIBE60 4.2.2 查看表的詳細(xì)結(jié)構(gòu)語(yǔ)句SHOW CREATE TABLE61 4.3 修改數(shù)據(jù)表62 4.3.1 修改表名62 4.3.2 修改字段的數(shù)據(jù)類型63 4.3.3 修改字段名64 4.3.4 添加字段65 4.3.5 刪除字段67 4.3.6 修改字段的排列位置68 4.3.7 更改表的存儲(chǔ)引擎69 4.3.8 刪除表的外鍵約束70 4.4 刪除數(shù)據(jù)表71 4.4.1 刪除沒(méi)有被關(guān)聯(lián)的表72 4.4.2 刪除被其他表關(guān)聯(lián)的主表72 4.5 綜合實(shí)例——數(shù)據(jù)表的基本操作74 4.6 高手甜點(diǎn)81 4.7 跟我學(xué)上機(jī)82 第5章 數(shù)據(jù)類型和運(yùn)算符85 5.1 MySQL數(shù)據(jù)類型介紹86 5.1.1 整數(shù)類型86 5.1.2 浮點(diǎn)數(shù)類型和定點(diǎn)數(shù)類型88 5.1.3 日期與時(shí)間類型89 5.1.4 字符串類型100 5.1.5 二進(jìn)制類型105 5.2 選擇數(shù)據(jù)類型的方法108 5.3 常見(jiàn)運(yùn)算符介紹109 5.3.1 運(yùn)算符概述109 5.3.2 算術(shù)運(yùn)算符110 5.3.3 比較運(yùn)算符111 5.3.4 邏輯運(yùn)算符119 5.3.5 位運(yùn)算符121 5.3.6 運(yùn)算符的優(yōu)先級(jí)124 5.4 綜合實(shí)例——運(yùn)算符的使用125 5.5 高手甜點(diǎn)127 5.6 跟我學(xué)上機(jī)128 第6章 索引的操作129 6.1 索引簡(jiǎn)介130 6.1.1 索引的含義和特點(diǎn)130 6.1.2 索引的分類130 6.1.3 索引的設(shè)計(jì)原則131 6.2 創(chuàng)建索引132 6.2.1 創(chuàng)建表的時(shí)候創(chuàng)建索引132 6.2.2 在已有的表上創(chuàng)建索引137 6.3 刪除索引144 6.4 綜合實(shí)例——?jiǎng)?chuàng)建索引145 6.5 高手甜點(diǎn)148 6.6 跟我學(xué)上機(jī)148 第7章 視圖的操作151 7.1 視圖概述152 7.1.1 視圖的含義152 7.1.2 視圖的作用153 7.2 創(chuàng)建視圖153 7.2.1 創(chuàng)建視圖的語(yǔ)法形式153 7.2.2 在單表上創(chuàng)建視圖154 7.2.3 在多表上創(chuàng)建視圖155 7.3 查看視圖156 7.3.1 用DESCRIBE語(yǔ)句查看視圖的 基本信息156 7.3.2 用SHOW TABLE STATUS語(yǔ)句 查看視圖的基本信息157 7.3.3 用SHOW CREATE VIEW語(yǔ)句 查看視圖的詳細(xì)信息158 7.3.4 在views表中查看視圖的詳細(xì) 信息158 7.4 修改視圖160 7.4.1 用CREATE OR REPLACE VIEW 語(yǔ)句修改視圖160 7.4.2 用ALTER語(yǔ)句修改視圖161 7.5 更新視圖161 7.6 刪除視圖164 7.7 綜合實(shí)例——視圖應(yīng)用165 7.8 高手甜點(diǎn)172 7.9 跟我學(xué)上機(jī)173 第3篇 SQL查詢語(yǔ)句 第8章 插入、更新與刪除數(shù)據(jù)177 8.1 插入數(shù)據(jù)178 8.1.1 為表的所有字段插入數(shù)據(jù)178 8.1.2 為表的指定字段插入數(shù)據(jù)180 8.1.3 同時(shí)插入多條記錄181 8.1.4 將查詢結(jié)果插入表中183 8.2 更新數(shù)據(jù)184 8.3 刪除數(shù)據(jù)186 8.4 綜合實(shí)例——記錄的插入、更新 和刪除188 8.5 高手甜點(diǎn)192 8.6 跟我學(xué)上機(jī)193 第9章 MySQL函數(shù)195 9.1 MySQL中的函數(shù)分類196 9.2 數(shù)學(xué)函數(shù)196 9.2.1 絕對(duì)值函數(shù)ABS(x)和返回 圓周率的函數(shù)PI()196 9.2.2 平方根函數(shù)SQRT(x)和求余函數(shù) MOD(x,y)197 9.2.3 獲取整數(shù)的函數(shù)CEIL(x)、CEILING(x)和FLOOR(x)197 9.2.4 獲取隨機(jī)數(shù)的函數(shù)RAND() 和RAND(x)198 9.2.5 四舍五入函數(shù)ROUND(x)、 ROUND(x,y)和 TRUNCATE(x,y)198 9.2.6 符號(hào)函數(shù)SIGN(x)200 9.2.7 冪運(yùn)算函數(shù)POW(x,y)、 POWER(x,y)和EXP(x)200 9.2.8 對(duì)數(shù)運(yùn)算函數(shù)LOG(x)和 LOG10(x)201 9.2.9 角度與弧度相互轉(zhuǎn)換的函數(shù) RADIANS(x)和DEGREES(x)201 9.2.10 正弦函數(shù)SIN(x)和反正弦 函數(shù)ASIN(x)202 9.2.11 余弦函數(shù)COS(x)和反余弦函數(shù) ACOS(x)202 9.2.12 正切函數(shù)、反正切函數(shù)和余切 函數(shù)203 9.3 字符串函數(shù)204 9.3.1 計(jì)算字符串中字符數(shù)的函數(shù) 和字符串長(zhǎng)度的函數(shù)204 9.3.2 合并字符串函數(shù)CONCAT(s1,s2,…)、 CONCAT_WS(x,s1,s2,…)204 9.3.3 替換字符串的函數(shù) INSERT(s1,x,len,s2)205 9.3.4 字母大小寫轉(zhuǎn)換函數(shù)206 9.3.5 獲取指定長(zhǎng)度字符串的函數(shù) LEFT(s,n)和RIGHT(s,n)206 9.3.6 填充字符串的函數(shù)LPAD(s1,len,s2) 和RPAD(s1,len,s2)207 9.3.7 刪除空格的函數(shù)LTRIM(s)、 RTRIM(s)和TRIM(s)208 9.3.8 刪除指定字符串的函數(shù)TRIM (s1 FROM s)208 9.3.9 重復(fù)生成字符串的函數(shù) REPEAT(s,n)209 9.3.10 空格函數(shù)SPACE(n)和替換函數(shù) REPLACE(s,s1,s2)209 9.3.11 比較字符串大小的函數(shù) STRCMP(s1,s2)210 9.3.12 獲取子串的函數(shù)SUBSTRING(s,n,len) 和MID(s,n,len)210 9.3.13 匹配子串開始位置的函數(shù)211 9.3.14 字符串逆序的函數(shù) REVERSE(s)211 9.3.15 返回指定位置的字符串的函數(shù) ELT(N,字符串1,字符串2,字符 串3,...,字符串N)212 9.3.16 返回指定字符串位置的函數(shù) FIELD(s,s1,s2,…)212 9.3.17 返回子串位置的函數(shù) FIND_IN_SET(s1,s2)212 9.3.18 選取字符串的函數(shù) MAKE_SET(x,s1,s2,…)213 9.4 日期和時(shí)間函數(shù)213 9.4.1 獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前 時(shí)間的函數(shù)214 9.4.2 獲取當(dāng)前日期和時(shí)間的函數(shù)214 9.4.3 UNIX時(shí)間戳函數(shù)215 9.4.4 返回UTC日期的函數(shù)和返回 UTC時(shí)間的函數(shù)215 9.4.5 獲取月份的函數(shù)MONTH(date) 和MONTHNAME(date)216 9.4.6 獲取星期的函數(shù)DAYNAME(d)、 DAYOFWEEK(d)和 WEEKDAY(d)216 9.4.7 獲取星期數(shù)的函數(shù)WEEK(d) 和WEEKOFYEAR(d)217 9.4.8 獲取天數(shù)的函數(shù)DAYOFYEAR(d) 和DAYOFMONTH(d)218 9.4.9 獲取年份、季度、小時(shí)、分鐘和 秒鐘的函數(shù)219 9.4.10 獲取日期的指定值的函數(shù) EXTRACT(type FROM date)220 9.4.11 時(shí)間和秒鐘轉(zhuǎn)換的函數(shù)220 9.4.12 計(jì)算日期和時(shí)間的函數(shù)221 9.4.13 格式化日期和時(shí)間的函數(shù)224 9.5 條件判斷函數(shù)227 9.5.1 IF(expr,v1,v2)函數(shù)227 9.5.2 IFNULL(v1,v2)函數(shù)227 9.5.3 CASE函數(shù)228 9.6 系統(tǒng)信息函數(shù)229 9.6.1 獲取MySQL版本號(hào)、連接數(shù)和 數(shù)據(jù)庫(kù)名的函數(shù)229 9.6.2 獲取用戶名的函數(shù)231 9.6.3 獲取字符串的字符集和排序方式 的函數(shù)231 9.6.4 獲取最后一個(gè)自動(dòng)生成的ID值 的函數(shù)232 9.7 加密和解密函數(shù)234 9.7.1 加密函數(shù)PASSWORD(str)234 9.7.2 加密函數(shù)MD5(str)234 9.7.3 加密函數(shù)ENCODE (str,pswd_str)234 9.7.4 解密函數(shù)DECODE (crypt_str,pswd_str)235 9.8 其他函數(shù)235 9.8.1 格式化函數(shù)FORMAT(x,n)235 9.8.2 不同進(jìn)制的數(shù)字進(jìn)行轉(zhuǎn)換的 函數(shù)236 9.8.3 IP地址與數(shù)字相互轉(zhuǎn)換的 函數(shù)236 9.8.4 加鎖函數(shù)和解鎖函數(shù)237 9.8.5 重復(fù)執(zhí)行指定操作的函數(shù)238 9.8.6 改變字符集的函數(shù)238 9.8.7 改變數(shù)據(jù)類型的函數(shù)239 9.9 綜合實(shí)例——MySQL函數(shù)的使用239 9.10 高手甜點(diǎn)242 9.11 跟我學(xué)上機(jī)243 第10章 查詢數(shù)據(jù)245 10.1 基本查詢語(yǔ)句246 10.2 單表查詢248 10.2.1 查詢所有字段248 10.2.2 查詢指定字段249 10.2.3 查詢指定記錄250 10.2.4 帶IN關(guān)鍵字的查詢252 10.2.5 帶BETWEEN AND的范圍 查詢254 10.2.6 帶LIKE的字符匹配查詢255 10.2.7 查詢空值256 10.2.8 帶AND的多條件查詢258 10.2.9 帶OR的多條件查詢259 10.2.10 查詢結(jié)果不重復(fù)260 10.2.11 對(duì)查詢結(jié)果排序261 10.2.12 分組查詢264 10.2.13 使用LIMIT限制查詢結(jié)果的 數(shù)量269 10.3 使用集合函數(shù)查詢270 10.3.1 COUNT()函數(shù)271 10.3.2 SUM()函數(shù)272 10.3.3 AVG()函數(shù)273 10.3.4 MAX()函數(shù)274 10.3.5 MIN()函數(shù)275 10.4 連接查詢276 10.4.1 內(nèi)連接查詢276 10.4.2 外連接查詢279 10.4.3 復(fù)合條件連接查詢281 10.5 子查詢282 10.5.1 帶ANY、SOME關(guān)鍵字的 子查詢282 10.5.2 帶ALL關(guān)鍵字的子查詢283 10.5.3 帶EXISTS關(guān)鍵字的子查詢283 10.5.4 帶IN關(guān)鍵字的子查詢285 10.5.5 帶比較運(yùn)算符的子查詢286 10.6 合并查詢結(jié)果288 10.7 為表和字段取別名290 10.7.1 為表取別名290 10.7.2 為字段取別名292 10.8 使用正則表達(dá)式查詢293 10.8.1 查詢以特定字符或字符串開頭 的記錄294 10.8.2 查詢以特定字符或字符串結(jié)尾 的記錄295 10.8.3 替代字符串中的任意一個(gè) 字符295 10.8.4 匹配多個(gè)字符296 10.8.5 匹配指定字符串297 10.8.6 匹配指定字符中的任意一個(gè)298 10.8.7 匹配指定字符以外的字符299 10.8.8 指定字符串連續(xù)出現(xiàn)的次數(shù)299 10.9 綜合實(shí)例——數(shù)據(jù)表查詢操作300 10.10 高手甜點(diǎn)307 10.11 跟我學(xué)上機(jī)308 第11章 存儲(chǔ)過(guò)程和函數(shù)309 11.1 創(chuàng)建存儲(chǔ)過(guò)程和函數(shù)310 11.1.1 創(chuàng)建存儲(chǔ)過(guò)程310 11.1.2 創(chuàng)建存儲(chǔ)函數(shù)312 11.1.3 變量的使用313 11.1.4 定義條件和處理程序314 11.1.5 光標(biāo)的使用317 11.1.6 流程控制的使用318 11.2 調(diào)用存儲(chǔ)過(guò)程和函數(shù)322 11.2.1 調(diào)用存儲(chǔ)過(guò)程323 11.2.2 調(diào)用存儲(chǔ)函數(shù)323 11.3 查看存儲(chǔ)過(guò)程和函數(shù)324 11.3.1 查看存儲(chǔ)過(guò)程和函數(shù)的狀態(tài)324 11.3.2 查看存儲(chǔ)過(guò)程和函數(shù)的定義325 11.3.3 查看存儲(chǔ)過(guò)程和函數(shù)的信息326 11.4 修改存儲(chǔ)過(guò)程和函數(shù)327 11.5 刪除存儲(chǔ)過(guò)程和函數(shù)329 11.6 綜合實(shí)例——綜合應(yīng)用存儲(chǔ)過(guò)程 和函數(shù)329 11.7 高手甜點(diǎn)332 11.8 跟我學(xué)上機(jī)333 第12章 MySQL觸發(fā)器335 12.1 創(chuàng)建觸發(fā)器336 12.1.1 創(chuàng)建只有一個(gè)執(zhí)行語(yǔ)句的 觸發(fā)器336 12.1.2 創(chuàng)建有多個(gè)執(zhí)行語(yǔ)句的 觸發(fā)器337 12.2 查看觸發(fā)器339 12.2.1 用SHOW TRIGGERS語(yǔ)句 查看觸發(fā)器信息339 12.2.2 在triggers表中查看觸發(fā)器 信息341 12.3 觸發(fā)器的使用342 12.4 刪除觸發(fā)器343 12.5 綜合實(shí)例——觸發(fā)器的應(yīng)用343 12.6 高手甜點(diǎn)345 12.7 跟我學(xué)上機(jī)346 第4篇 MySQL數(shù)據(jù)庫(kù)高級(jí)管理 第13章 MySQL安全性機(jī)制349 13.1 權(quán)限表350 13.1.1 user表350 13.1.2 db表和host表352 13.1.3 tables_priv表和 columns_priv表354 13.1.4 procs_priv表356 13.2 賬戶管理356 13.2.1 登錄和退出MySQL服務(wù)器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 權(quán)限管理367 13.3.1 MySQL的各種權(quán)限368 13.3.2 授權(quán)370 13.3.3 收回權(quán)限372 13.3.4 查看權(quán)限373 13.4 訪問(wèn)控制373 13.4.1 連接核實(shí)階段374 13.4.2 請(qǐng)求核實(shí)階段374 13.5 綜合實(shí)例——綜合管理用戶權(quán)限375 13.6 高手甜點(diǎn)378 13.7 跟我學(xué)上機(jī)378 第14章 數(shù)據(jù)備份與還原381 14.1 數(shù)據(jù)備份382 14.1.1 使用mysqldump命令備份382 14.1.2 直接復(fù)制整個(gè)數(shù)據(jù)庫(kù)目錄388 14.1.3 使用mysqlhotcopy工具快速 備份388 14.2 數(shù)據(jù)還原389 14.2.1 使用mysql命令還原389 14.2.2 直接復(fù)制到數(shù)據(jù)庫(kù)目錄390 14.2.3 mysqlhotcopy快速恢復(fù)390 14.3 數(shù)據(jù)庫(kù)遷移391 14.3.1 相同版本的MySQL數(shù)據(jù)庫(kù) 之間的遷移391 14.3.2 不同版本的MySQL數(shù)據(jù)庫(kù) 之間的遷移391 14.3.3 不同數(shù)據(jù)庫(kù)之間的遷移392 14.4 表的導(dǎo)出和導(dǎo)入392 14.4.1 用SELECT…INTO OUTFILE 導(dǎo)出文本文件392 14.4.2 用mysqldump命令導(dǎo)出文本 文件395 14.4.3 用mysql命令導(dǎo)出文本文件397 14.4.4 使用LOAD DATA INFILE 方式導(dǎo)入文本文件400 14.4.5 使用mysqlimport命令導(dǎo)入 文本文件402 14.5 綜合實(shí)例——數(shù)據(jù)的備份與恢復(fù)404 14.6 高手甜點(diǎn)408 14.7 跟我學(xué)上機(jī)409 第15章 管理MySQL日志411 15.1 日志簡(jiǎn)介412 15.2 二進(jìn)制日志412 15.2.1 啟動(dòng)和設(shè)置二進(jìn)制日志412 15.2.2 查看二進(jìn)制日志413 15.2.3 刪除二進(jìn)制日志415 15.2.4 使用二進(jìn)制日志還原數(shù)據(jù)庫(kù)417 15.2.5 暫時(shí)停止記錄二進(jìn)制日志的 功能417 15.3 錯(cuò)誤日志418 15.3.1 啟動(dòng)和設(shè)置錯(cuò)誤日志418 15.3.2 查看錯(cuò)誤日志418 15.3.3 刪除錯(cuò)誤日志419 15.4 通用查詢?nèi)罩?20 15.4.1 啟動(dòng)和設(shè)置通用查詢?nèi)罩?20 15.4.2 查看通用查詢?nèi)罩?20 15.4.3 刪除通用查詢?nèi)罩?20 15.5 慢查詢?nèi)罩?21 15.5.1 啟動(dòng)和設(shè)置慢查詢?nèi)罩?21 15.5.2 查看慢查詢?nèi)罩?22 15.5.3 刪除慢查詢?nèi)罩?22 15.6 綜合實(shí)例——MySQL日志的綜合 管理422 15.7 高手甜點(diǎn)428 15.8 跟我學(xué)上機(jī)428 第16章 MySQL性能的優(yōu)化429 16.1 優(yōu)化簡(jiǎn)介430 16.2 優(yōu)化查詢430 16.2.1 分析查詢語(yǔ)句431 16.2.2 索引對(duì)查詢速度的影響433 16.2.3 使用索引查詢434 16.2.4 優(yōu)化子查詢436 16.3 優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu)437 16.3.1 將字段較多的表分解成 多個(gè)表437 16.3.2 增加中間表438 16.3.3 增加冗余字段440 16.3.4 優(yōu)化插入記錄的速度440 16.3.5 分析、檢查和優(yōu)化表442 16.4 優(yōu)化MySQL服務(wù)器443 16.4.1 優(yōu)化服務(wù)器硬件444 16.4.2 優(yōu)化MySQL的參數(shù)444 16.5 綜合實(shí)例——全面優(yōu)化MySQL 服務(wù)器445 16.6 高手甜點(diǎn)447 16.7 跟我學(xué)上機(jī)448 第17章 MySQL的高級(jí)特性449 17.1 MySQL查詢緩存450 17.1.1 認(rèn)識(shí)查詢緩存450 17.1.2 監(jiān)控和維護(hù)查詢緩存455 17.1.3 檢查緩存命中456 17.1.4 優(yōu)化查詢緩存457 17.2 合并表和分區(qū)表458 17.2.1 合并表458 17.2.2 分區(qū)表460 17.3 事務(wù)控制469 17.4 MySQL分布式事務(wù)473 17.4.1 分布式事務(wù)的原理473 17.4.2 分布式事務(wù)的語(yǔ)法473 17.5 高手甜點(diǎn)474 17.6 跟我學(xué)上機(jī)475 第18章 使用MySQL Workbench 管理數(shù)據(jù)庫(kù)477 18.1 MySQL Workbench簡(jiǎn)介478 18.1.1 MySQL Workbench的優(yōu)勢(shì)478 18.1.2 安裝MySQL Workbench478 18.2 SQL Development的基本操作480 18.2.1 創(chuàng)建數(shù)據(jù)庫(kù)連接480 18.2.2 創(chuàng)建和刪除新的數(shù)據(jù)庫(kù)482 18.2.3 創(chuàng)建和刪除新的數(shù)據(jù)表483 18.2.4 添加、修改表記錄486 18.2.5 查詢表記錄487 18.2.6 修改表結(jié)構(gòu)488 18.3 Data Modeling的基本操作489 18.3.1 建立ER模型489 18.3.2 導(dǎo)入ER模型493 18.4 Server Administration的基本操作495 18.4.1 管理MySQL用戶495 18.4.2 備份MySQL數(shù)據(jù)庫(kù)498 18.4.3 還原MySQL數(shù)據(jù)庫(kù)500 18.5 高手甜點(diǎn)501 18.6 跟我學(xué)上機(jī)501 第5篇 MySQL開發(fā)與案例設(shè)計(jì) 第19章 Java訪問(wèn)MySQL 數(shù)據(jù)庫(kù)505 19.1 JDBC概述506 19.2 下載與安裝MySQL Connector/J506 19.2.1 下載MySQL Connector/J506 19.2.2 安裝MySQL Connector/J 驅(qū)動(dòng)507 19.3 Java連接MySQL數(shù)據(jù)庫(kù)507 19.4 Java操作MySQL數(shù)據(jù)庫(kù)509 19.4.1 創(chuàng)建Statement對(duì)象509 19.4.2 使用SELECT語(yǔ)句查詢數(shù)據(jù)509 19.4.3 插入、更新和刪除數(shù)據(jù)510 19.4.4 執(zhí)行任意SQL語(yǔ)句510 19.4.5 關(guān)閉創(chuàng)建的對(duì)象511 19.5 Java備份和還原MySQL數(shù)據(jù)庫(kù)512 19.5.1 備份MySQL數(shù)據(jù)庫(kù)512 19.5.2 還原MySQL數(shù)據(jù)庫(kù)512 19.6 高手甜點(diǎn)512 19.7 跟我學(xué)上機(jī)513 第20章 PHP操作MySQL 數(shù)據(jù)庫(kù)515 20.1 PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)的一般 步驟516 20.2 連接數(shù)據(jù)庫(kù)前的準(zhǔn)備工作516 20.2.1 在Windows系統(tǒng)下配置 PHP516 20.2.2 在Linux系統(tǒng)下配置PHP517 20.3 PHP操作MySQL數(shù)據(jù)庫(kù)所用的 函數(shù)517 20.3.1 通過(guò)mysqli類庫(kù)訪問(wèn)MySQL 數(shù)據(jù)庫(kù)517 20.3.2 使用mysqli_connect()函數(shù)連接 MySQL服務(wù)器519 20.3.3 使用mysqli_select_db()函數(shù) 選擇數(shù)據(jù)庫(kù)文件520 20.3.4 使用mysqli_query()函數(shù) 執(zhí)行SQL語(yǔ)句520 20.3.5 使用mysqli_fetch_assoc ()函數(shù) 從數(shù)組結(jié)果集中獲取信息521 20.3.6 使用mysqli_fetch_object()函數(shù) 從結(jié)果中獲取一行作為對(duì)象521 20.3.7 使用mysqli_num_rows()函數(shù) 獲取查詢結(jié)果集中的記錄數(shù)521 20.3.8 使用mysqli_free_result()函數(shù) 釋放資源522 20.3.9 使用mysqli_close()函數(shù)關(guān)閉 連接522 20.4 綜合實(shí)例1——使用insert語(yǔ)句動(dòng)態(tài) 添加用戶信息522 20.5 綜合實(shí)例2——使用select語(yǔ)句查詢 數(shù)據(jù)信息524 20.6 高手甜點(diǎn)526 20.7 跟我學(xué)上機(jī)527 第21章 論壇管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)529 21.1 系統(tǒng)概述530 21.2 系統(tǒng)功能530 21.3 數(shù)據(jù)庫(kù)設(shè)計(jì)和實(shí)現(xiàn)531 21.3.1 設(shè)計(jì)方案圖表531 21.3.2 設(shè)計(jì)表533 21.3.3 設(shè)計(jì)索引537 21.3.4 設(shè)計(jì)視圖538 21.3.5 設(shè)計(jì)觸發(fā)器538 第22章 新聞發(fā)布系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)541 22.1 系統(tǒng)概述542 22.2 系統(tǒng)功能542 22.3 數(shù)據(jù)庫(kù)設(shè)計(jì)和實(shí)現(xiàn)543 22.3.1 設(shè)計(jì)表543 22.3.2 設(shè)計(jì)索引548 22.3.3 設(shè)計(jì)視圖549 22.3.4 設(shè)計(jì)觸發(fā)器549
第1章
初識(shí)MySQL MySQL是一個(gè)開放源代碼的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),它是由MySQL AB公司開發(fā)、發(fā)布并支持的。MySQL是一個(gè)跨平臺(tái)的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛地應(yīng)用于Internet上的中小型網(wǎng)站開發(fā)。本章主要介紹數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),通過(guò)本章的學(xué)習(xí),讀者可以了解數(shù)據(jù)庫(kù)的基本概念、數(shù)據(jù)庫(kù)的構(gòu)成和MySQL的基本知識(shí)。 學(xué)習(xí)目標(biāo)(已掌握的在方框中打鉤) 了解數(shù)據(jù)庫(kù)的基本概念 了解表、數(shù)據(jù)類型和主鍵 熟悉數(shù)據(jù)庫(kù)的技術(shù)構(gòu)成 熟悉MySQL 掌握常見(jiàn)的MySQL工具 1.1 關(guān)于數(shù)據(jù)庫(kù)的基本概念 數(shù)據(jù)庫(kù)(Database,DB)是由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被存放在結(jié)構(gòu)化的數(shù)據(jù)表里。數(shù)據(jù)表之間相互關(guān)聯(lián),反映了客觀事物間的本質(zhì)聯(lián)系。數(shù)據(jù)庫(kù)系統(tǒng)提供對(duì)數(shù)據(jù)的安全控制和完整性控制。本節(jié)將介紹數(shù)據(jù)庫(kù)中的一些基本概念,包括數(shù)據(jù)庫(kù)的定義、數(shù)據(jù)表的定義和數(shù)據(jù)類型等。 1.1.1 數(shù)據(jù)庫(kù) 隨著信息技術(shù)和市場(chǎng)的快速發(fā)展,數(shù)據(jù)庫(kù)技術(shù)層出不窮;隨著應(yīng)用的拓展和深入,數(shù)據(jù)庫(kù)的數(shù)量和規(guī)模越來(lái)越大。數(shù)據(jù)庫(kù)的誕生和發(fā)展給計(jì)算機(jī)信息管理帶來(lái)了一場(chǎng)巨大的革命。 數(shù)據(jù)處理技術(shù)的發(fā)展大致劃分為人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫(kù)系統(tǒng)階段和高級(jí)數(shù)據(jù)庫(kù)階段。數(shù)據(jù)庫(kù)的種類大概有層次式數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)式數(shù)據(jù)庫(kù)和關(guān)系式數(shù)據(jù)庫(kù)三種,不同種類的數(shù)據(jù)庫(kù)按不同的數(shù)據(jù)結(jié)構(gòu)來(lái)聯(lián)系和組織。 對(duì)于數(shù)據(jù)庫(kù)的概念,沒(méi)有一個(gè)完全固定的定義,隨著數(shù)據(jù)庫(kù)歷史的發(fā)展,定義的內(nèi)容也有很大的差異。其中一種比較普遍的觀點(diǎn)認(rèn)為,數(shù)據(jù)庫(kù)是一個(gè)長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、有共享的、統(tǒng)一管理的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)是一個(gè)按數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)和管理數(shù)據(jù)的計(jì)算機(jī)軟件系統(tǒng),即數(shù)據(jù)庫(kù)包含兩層含義:既可指保管數(shù)據(jù)的“倉(cāng)庫(kù)”,又可指數(shù)據(jù)管理的方法和技術(shù)。 數(shù)據(jù)庫(kù)具有如下特點(diǎn):①實(shí)現(xiàn)數(shù)據(jù)共享,減少數(shù)據(jù)冗余;②采用特定的數(shù)據(jù)類型;③具有較高的數(shù)據(jù)獨(dú)立性;④具有統(tǒng)一的數(shù)據(jù)控制功能。 1.1.2 表 在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)表是一系列二維數(shù)組的集合,用來(lái)存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。它由縱向的列和橫向的行組成,行被稱為記錄,是組織數(shù)據(jù)的單位;列被稱為字段,每一列表示記錄的一個(gè)屬性,都有相應(yīng)的描述信息,如數(shù)據(jù)類型、數(shù)據(jù)寬度等。 例如,一個(gè)有關(guān)作者信息的名為authors的表中,每一列包含所有作者的某個(gè)特定類型的信息,比如“姓名”,而每一行則包含某個(gè)特定作者的所有信息,如編號(hào)、姓名、性別、專業(yè),如圖1-1所示。 編號(hào) 姓名 性別 專業(yè) 100 張三 f 計(jì)算機(jī) 101 李芬 m 會(huì)計(jì) 102 岳陽(yáng) f 園林 圖1-1 authors表的結(jié)構(gòu)與記錄 1.1.3 數(shù)據(jù)類型 數(shù)據(jù)類型決定了數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)格式,代表不同的信息類型。常用的數(shù)據(jù)類型有整數(shù)數(shù)據(jù)類型、浮點(diǎn)數(shù)數(shù)據(jù)類型、精確小數(shù)類型、二進(jìn)制數(shù)據(jù)類型、日期/時(shí)間數(shù)據(jù)類型和字符串?dāng)?shù)據(jù)類型。 表中的每一個(gè)字段就是某種指定數(shù)據(jù)類型,比如圖1-1中“編號(hào)”字段為整數(shù)數(shù)據(jù),“性別”字段為字符型數(shù)據(jù)。 1.1.4 主鍵 主鍵(Primary Key)又稱主碼,用于唯一地標(biāo)識(shí)表中的每一條記錄。可以定義表中的一列或多列為主鍵,主鍵列上不能有兩行相同的值,也不能為空值。假如,定義authors表,該表給每一個(gè)作者分配一個(gè)“作者編號(hào)”,該編號(hào)作為數(shù)據(jù)表的主鍵,如果出現(xiàn)相同的值,將提示錯(cuò)誤,因?yàn)橄到y(tǒng)不能確定查詢的究竟是哪一條記錄;如果把作者的“姓名”作為主鍵,則不能出現(xiàn)重復(fù)的名字,這與現(xiàn)實(shí)不相符,因此“姓名”字段不適合作為主鍵。 1.2 數(shù)據(jù)庫(kù)技術(shù)構(gòu)成 數(shù)據(jù)庫(kù)系統(tǒng)由硬件部分和軟件部分共同構(gòu)成。硬件主要用于存儲(chǔ)數(shù)據(jù)庫(kù)中的數(shù)據(jù),包括計(jì)算機(jī)、存儲(chǔ)設(shè)備等;軟件部分則主要包括DBMS、支持DBMS運(yùn)行的操作系統(tǒng),以及支持多種語(yǔ)言進(jìn)行應(yīng)用開發(fā)的訪問(wèn)技術(shù)等。本節(jié)將介紹數(shù)據(jù)庫(kù)的技術(shù)構(gòu)成。 1.2.1 數(shù)據(jù)庫(kù)系統(tǒng) 數(shù)據(jù)庫(kù)系統(tǒng)有3個(gè)主要的組成部分。 (1) 數(shù)據(jù)庫(kù)(Database):提供了一個(gè)存儲(chǔ)空間用以存儲(chǔ)各種數(shù)據(jù),可以將數(shù)據(jù)庫(kù)視為一個(gè)存儲(chǔ)數(shù)據(jù)的容器。一個(gè)數(shù)據(jù)庫(kù)可能包含許多文件,一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)中通常包含許多數(shù)據(jù)庫(kù)。 (2) 數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System,DBMS):用戶創(chuàng)建、管理和維護(hù)數(shù)據(jù)庫(kù)時(shí)所使用的軟件,位于用戶與操作系統(tǒng)之間,對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一管理。DBMS能定義數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),提供數(shù)據(jù)的操作機(jī)制,維護(hù)數(shù)據(jù)庫(kù)的安全性、完整性和可靠性。 (3) 數(shù)據(jù)庫(kù)應(yīng)用程序(Database Application):雖然已經(jīng)有了DBMS,但是在很多情況下,DBMS無(wú)法滿足對(duì)數(shù)據(jù)管理的要求。數(shù)據(jù)庫(kù)應(yīng)用程序的使用可以滿足對(duì)數(shù)據(jù)管理的更高要求,還可以使數(shù)據(jù)管理過(guò)程更加直觀和友好。數(shù)據(jù)庫(kù)應(yīng)用程序負(fù)責(zé)與DBMS進(jìn)行通信,訪問(wèn)和管理DBMS中存儲(chǔ)的數(shù)據(jù),允許用戶插入、修改、刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。 數(shù)據(jù)庫(kù)系統(tǒng)如圖1-2所示。 圖1-2 數(shù)據(jù)庫(kù)系統(tǒng) 1.2.2 SQL語(yǔ)言 對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢和修改操作的語(yǔ)言叫作SQL。SQL的中文含義是結(jié)構(gòu)化查詢語(yǔ)言(英文全稱是Structured Query Language)。SQL有許多不同的類型,有3個(gè)主要的標(biāo)準(zhǔn):①ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)機(jī)構(gòu)) SQL,對(duì)ANSI SQL修改后在1992年采納的標(biāo)準(zhǔn),稱為SQL-92或SQL2;②SQL-99標(biāo)準(zhǔn),SQL-99標(biāo)準(zhǔn)從SQL2擴(kuò)充而來(lái)并增加了對(duì)象關(guān)系特征和許多其他新功能;③各大數(shù)據(jù)庫(kù)廠商提供的不同版本的SQL,這些版本的SQL不但能包括原始的ANSI標(biāo)準(zhǔn),而且在很大程度上支持新推出的SQL-92標(biāo)準(zhǔn)。 SQL語(yǔ)言包含以下4個(gè)部分。 (1) 數(shù)據(jù)定義語(yǔ)言(DDL):包括DROP、CREATE、ALTER等語(yǔ)句。 (2) 數(shù)據(jù)操縱語(yǔ)言(DML):包括INSERT(插入)、UPDATE(修改)、DELETE(刪除)等語(yǔ)句。 (3) 數(shù)據(jù)查詢語(yǔ)言(DQL):包括SELECT語(yǔ)句等。 (4) 數(shù)據(jù)控制語(yǔ)言(DCL):包括GRANT、REVOKE、COMMIT、ROLLBACK等語(yǔ)句。 下面是SQL語(yǔ)句的例子,該語(yǔ)句聲明創(chuàng)建一個(gè)students表: CREATE TABLE students ( student_id INT UNSIGNED, name VARCHAR(30), sex CHAR(1), birth DATE, PRIMARY KEY (student_id) ); 該表包含4個(gè)字段,分別為student_id、name、sex、birth,其中student_id定義為表的主鍵。 現(xiàn)在只是定義了一張表格,而沒(méi)有任何數(shù)據(jù),接下來(lái)用下面這條SQL聲明語(yǔ)句,在students表中插入一條數(shù)據(jù)記錄: INSERT INTO students (student_id, name, sex, birth) VALUES (41048101, 'Lucy Green', '1', '1990-02-14'); 執(zhí)行完上面的SQL語(yǔ)句之后,students表中就會(huì)增加一行新記錄,該記錄中字段student_id的值為41048101,name字段的值為L(zhǎng)ucy Green,sex字段的值為1,birth字段的值為1990-02-14。 再使用SELECT查詢語(yǔ)句獲取剛才插入的數(shù)據(jù),結(jié)果如下: SELECT name FROM students WHERE student_id = 41048101; +--------------+ | name | +--------------+ | Lucy Green | +--------------+ 上面簡(jiǎn)單列舉了常用的數(shù)據(jù)庫(kù)操作語(yǔ)句,只是為了給讀者一個(gè)直觀的印象,讀者可能還不能理解,接下來(lái)會(huì)在學(xué)習(xí)MySQL的過(guò)程中詳細(xì)介紹這些知識(shí)。 1.2.3 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù) 不同的程序設(shè)計(jì)語(yǔ)言會(huì)有各自不同的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),程序語(yǔ)言通過(guò)這些技術(shù),執(zhí)行SQL語(yǔ)句,進(jìn)行數(shù)據(jù)庫(kù)管理。主要的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)如下。 1.ODBC ODBC(Open Database Connectivity,開放式數(shù)據(jù)庫(kù)連接)技術(shù)為訪問(wèn)不同的SQL數(shù)據(jù)庫(kù)提供了一個(gè)共同的接口。這一接口提供了最大限度的互操作性:一個(gè)應(yīng)用程序可以通過(guò)共同的一組代碼訪問(wèn)不同的 SQL 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。 基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫(kù)的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)的DBMS的ODBC驅(qū)動(dòng)程序完成。也就是說(shuō),不論是Access、MySQL還是Oracle數(shù)據(jù)庫(kù),均可用ODBC API進(jìn)行訪問(wèn)。由此可見(jiàn),ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫(kù)。 2.JDBC JDBC(Java Database Connectivity,Java數(shù)據(jù)庫(kù)連接)是Java應(yīng)用程序連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法,是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn)。JDBC由一組用Java語(yǔ)言編寫的類和接口組成。 3.ADO.NET ADO.NET是微軟在.NET框架下開發(fā)設(shè)計(jì)的一組用于和數(shù)據(jù)源進(jìn)行交互的面向?qū)ο箢悗?kù)。ADO.NET提供了對(duì)關(guān)系數(shù)據(jù)、XML和應(yīng)用程序數(shù)據(jù)的訪問(wèn),允許和不同類型的數(shù)據(jù)源以及數(shù)據(jù)庫(kù)進(jìn)行交互。 4.PDO PDO(PHP Data Object,PHP數(shù)據(jù)對(duì)象)為PHP訪問(wèn)數(shù)據(jù)庫(kù)定義了一個(gè)輕量級(jí)的、一致性的接口,提供了一個(gè)數(shù)據(jù)訪問(wèn)抽象層,這樣,無(wú)論使用什么數(shù)據(jù)庫(kù),都可以通過(guò)一致的函數(shù)執(zhí)行查詢和獲取數(shù)據(jù)。PDO是PHP 5新加入的一個(gè)重大功能。 針對(duì)不同的程序語(yǔ)言,MySQL提供了不同的數(shù)據(jù)庫(kù)訪問(wèn)連接驅(qū)動(dòng),讀者可以在相關(guān)網(wǎng)站的下載頁(yè)面(http://dev.mysql.com/downloads/)下載相關(guān)驅(qū)動(dòng)。 1.3 MySQL簡(jiǎn)介 MySQL是一個(gè)小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),與其他大型數(shù)據(jù)庫(kù)管理系統(tǒng)(如Oracle、DB2、SQL Server)等相比,MySQL的規(guī)模小、功能有限。但是由于MySQL的體積小、速度快、成本低,且提供的功能對(duì)稍微復(fù)雜的應(yīng)用來(lái)說(shuō)已經(jīng)夠用,因此使得MySQL成為世界上最受歡迎的開放源代碼數(shù)據(jù)庫(kù)。本節(jié)將介紹MySQL的特點(diǎn)。 1.3.1 客戶機(jī)-服務(wù)器軟件 主從式架構(gòu)(Client-Server Model)或客戶端/服務(wù)器(Client/Server)結(jié)構(gòu)簡(jiǎn)稱C/S結(jié)構(gòu),它是一種網(wǎng)絡(luò)架構(gòu),通常在該網(wǎng)絡(luò)架構(gòu)下,軟件分為客戶端(Client)和服務(wù)器(Server)兩部分。 服務(wù)器是整個(gè)應(yīng)用系統(tǒng)資源的存儲(chǔ)與管理中心,多個(gè)客戶端則各自處理相應(yīng)的功能,共同實(shí)現(xiàn)完整的應(yīng)用。在客戶/服務(wù)器結(jié)構(gòu)中,客戶端用戶的請(qǐng)求被傳送到數(shù)據(jù)庫(kù)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行處理后,將結(jié)果返回給用戶,從而減少了網(wǎng)絡(luò)數(shù)據(jù)傳輸量。 用戶使用應(yīng)用程序時(shí),首先啟動(dòng)客戶端通過(guò)有關(guān)命令告知服務(wù)器進(jìn)行連接以完成各種操作,而服務(wù)器則按照此請(qǐng)示提供相應(yīng)的服務(wù)。每一個(gè)客戶端軟件的實(shí)例都可以向一個(gè)服務(wù)器或應(yīng)用程序服務(wù)器發(fā)出請(qǐng)求。 這種系統(tǒng)的特點(diǎn)就是,客戶端和服務(wù)器程序不在同一臺(tái)計(jì)算機(jī)上運(yùn)行,它們歸屬于不同的計(jì)算機(jī)。 主從式架構(gòu)通過(guò)不同的途徑應(yīng)用于很多不同類型的應(yīng)用程序,比如,現(xiàn)在人們最熟悉的在因特網(wǎng)(Internet)上使用的網(wǎng)頁(yè)。例如,當(dāng)顧客想要在當(dāng)當(dāng)網(wǎng)站上買書的時(shí)候,電腦和網(wǎng)頁(yè)瀏覽器就被當(dāng)作一個(gè)客戶端,同時(shí),組成當(dāng)當(dāng)網(wǎng)的電腦、數(shù)據(jù)庫(kù)和應(yīng)用程序就被當(dāng)作服務(wù)器。當(dāng)顧客的網(wǎng)頁(yè)瀏覽器向當(dāng)當(dāng)網(wǎng)請(qǐng)求搜尋某種圖書時(shí),當(dāng)當(dāng)網(wǎng)服務(wù)器就從當(dāng)當(dāng)網(wǎng)的數(shù)據(jù)庫(kù)中找出所有該類型的圖書信息,結(jié)合成一個(gè)網(wǎng)頁(yè),再發(fā)送回顧客的瀏覽器。服務(wù)器端一般使用高性能的計(jì)算機(jī),并配合使用不同類型的數(shù)據(jù)庫(kù),比如Oracle、Sybase、MySQL等;客戶端需要安裝專門的軟件,比如瀏覽器。 1.3.2 MySQL的版本 針對(duì)不同用戶,MySQL分為兩個(gè)不同的版本: * MySQL Community Server(社區(qū)版):該版本完全免費(fèi),但是官方不提供技術(shù)支持。 * MySQL Enterprise Server(企業(yè)版服務(wù)器):它能夠以很高的性價(jià)比為企業(yè)提供數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用,支持滿足ACID屬性的事務(wù)處理,提供完整的提交、回滾、崩潰恢復(fù)和行級(jí)鎖定功能。但是該版本需付費(fèi)使用,官方提供電話技術(shù)支持。 MySQL Cluster主要用于架設(shè)集群服務(wù)器,需要在社區(qū)版或企業(yè)版的基礎(chǔ)上使用。 MySQL的命名機(jī)制由3個(gè)數(shù)字組成,例如,mysql-5.6.10。 (1) 第1個(gè)數(shù)字(5)是主版本號(hào),描述了文件格式,所有版本為5的發(fā)行版都有相同的文件格式。 (2) 第2個(gè)數(shù)字(6)是發(fā)行級(jí)別,主版本號(hào)和發(fā)行級(jí)別組合在一起便構(gòu)成了發(fā)行序列號(hào)。 (3) 第3個(gè)數(shù)字(10)是此發(fā)行系列中的版本號(hào),隨每次新分發(fā)版本遞增。 在MySQL的開發(fā)過(guò)程中,同時(shí)存在多個(gè)發(fā)布系列,每個(gè)發(fā)布處在成熟度的不同階段。 (1) MySQL 5.6是最新開發(fā)的穩(wěn)定(GA)發(fā)布系列,是將執(zhí)行新功能的系列,目前已經(jīng)可以正常使用。 (2) MySQL 5.5是比較穩(wěn)定(GA)發(fā)布系列。只是針對(duì)漏洞修復(fù)后重新發(fā)布,沒(méi)有增加會(huì)影響穩(wěn)定性的新功能。 (3) MySQL 5.1是前一穩(wěn)定(產(chǎn)品質(zhì)量)發(fā)布系列。只是針對(duì)嚴(yán)重漏洞修復(fù)和安全修復(fù)后重新發(fā)布,沒(méi)有增加會(huì)影響該系列的重要功能。 對(duì)于MySQL 4.1、4.0和3.23等低于5.0的老版本,官方將不再提供支持。而所有發(fā)布的MySQL(Current Generally Available Release)版本已經(jīng)經(jīng)過(guò)嚴(yán)格標(biāo)準(zhǔn)的測(cè)試,可以保證其安全可靠地使用。針對(duì)不同的操作系統(tǒng),讀者可以在MySQL的官方下載頁(yè)面(http://dev.mysql.com/downloads/)下載到相應(yīng)的安裝文件。 1.3.3 MySQL的優(yōu)勢(shì) MySQL的主要優(yōu)勢(shì)如下。 (1) 速度:運(yùn)行速度快。 (2) 價(jià)格:MySQL對(duì)大多數(shù)個(gè)人用戶來(lái)說(shuō)是免費(fèi)的。 (3) 容易使用:與其他大型數(shù)據(jù)庫(kù)的設(shè)置和管理相比,其復(fù)雜程度較低,易于學(xué)習(xí)。 (4) 可移植性:能夠工作在眾多不同的系統(tǒng)平臺(tái)上,例如,Windows、Linux、Unix、Mac OS等。 (5) 豐富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等語(yǔ)言的API。 (6) 支持查詢語(yǔ)言:MySQL可以利用標(biāo)準(zhǔn)的SQL語(yǔ)法和支持ODBC的應(yīng)用程序。 (7) 安全性和連接性:具有十分靈活和安全的權(quán)限和密碼系統(tǒng),允許基于主機(jī)的驗(yàn)證。連接到服務(wù)器時(shí),所有的密碼傳輸均采用加密形式,從而保證了密碼安全。并且由于MySQL是網(wǎng)絡(luò)化的,因此可以在連接因特網(wǎng)的任何地方訪問(wèn),從而提高了數(shù)據(jù)共享的效率。 1.3.4 MySQL 5.6的新功能 和MySQL 5.5相比,MySQL 5.6的新功能主要包括以下幾個(gè)方面。 (1) 子查詢優(yōu)化:通過(guò)優(yōu)化子查詢,可以提高執(zhí)行效率,主要表現(xiàn)在查詢的結(jié)果集合、分類和返回的執(zhí)行次數(shù)上。 (2) 強(qiáng)化Optimizer Diagnostics(優(yōu)化診斷)功能:運(yùn)用EXPLAIN執(zhí)行INSERT、UPDATE和DELETE,EXPLAIN以JSON格式輸出,提供更精確的最佳化指標(biāo)和絕佳的可讀性。Optimizer Traces(優(yōu)化追蹤)功能還可以追蹤最佳化決策過(guò)程。 (3) 通過(guò)強(qiáng)化InnoDB存儲(chǔ)引擎,提升效能處理量和應(yīng)用軟件的可用性:提升處理和只讀量高達(dá)230%,InnoDB重構(gòu)得以盡量減少傳統(tǒng)線程、沖洗和凈化互斥的沖突和瓶頸,在高負(fù)載的OLTP系統(tǒng)展現(xiàn)更優(yōu)異的數(shù)據(jù)同步性,顯著提升只讀和交易工作負(fù)載的處理量。 (4) 大幅提升可用性:數(shù)據(jù)庫(kù)管理員運(yùn)用在線數(shù)據(jù)定義語(yǔ)言作業(yè),可執(zhí)行新增索引和窗體變更功能,并同時(shí)更新應(yīng)用程序。 (5) 新增Index Condition Pushdown (ICP,索引條件下推)和Batch Key Access (BKA,批鍵訪問(wèn))功能:提升特定查詢量高達(dá)280倍。 (6) InnoDB全文檢索功能:開發(fā)人員可以在InnoDB窗體上建立全文索引功能,以呈現(xiàn)文字搜尋結(jié)果,加快搜尋單字和語(yǔ)句。 (7) 自我修復(fù)復(fù)制叢集:新增的Global Transaction Identifiers and Utilities(全局事務(wù)識(shí)別與應(yīng)用)可以簡(jiǎn)化自動(dòng)偵測(cè)和復(fù)原功能。當(dāng)數(shù)據(jù)庫(kù)發(fā)生毀損時(shí),數(shù)據(jù)庫(kù)管理員無(wú)須介入,即可運(yùn)用Crash-Safe Replication功能,自動(dòng)將二進(jìn)制記錄和備份數(shù)據(jù)恢復(fù)至正確位置。Checksums可通過(guò)自動(dòng)偵測(cè)和警示錯(cuò)誤的功能,跨叢集保持?jǐn)?shù)據(jù)的完整性。 (8) 高效能復(fù)制叢集:通過(guò)Multi-Threaded Slaves(多線程從庫(kù)),Binlog Group Commit(二進(jìn)制日志文件成組提交)和Optimized Row-Based Replication(優(yōu)化的基于行的復(fù)制)可以將復(fù)制能力提高5倍之多。用戶向外擴(kuò)充其跨商品系統(tǒng)的工作負(fù)載時(shí),可以大幅提升復(fù)制的效能和效率。 (9) 時(shí)間延遲復(fù)制:可以防止主計(jì)算機(jī)的作業(yè)失誤,例如意外刪除窗體。 (10) 強(qiáng)化的PERFORMANCE_SCHEMA:協(xié)助用戶得以監(jiān)控使用最多資源的密集查詢指令、對(duì)象、用戶和應(yīng)用程序,并可將查詢、用戶、主機(jī)和對(duì)象的統(tǒng)計(jì)數(shù)據(jù)匯整成新的摘要頁(yè)面。新增功能可以使預(yù)設(shè)配置更加簡(jiǎn)易,而且耗費(fèi)不到5%的成本。 (11) MySQL?5.6納入的新功能包含精確空間操作的地理信息系統(tǒng)(Geographic Information System)、強(qiáng)化的IPv6設(shè)備以及最佳化的服務(wù)器默認(rèn)值。 1.4 MySQL的工具 MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)提供了許多命令行工具,這些工具可以用來(lái)管理MySQL服務(wù)器、訪問(wèn)控制數(shù)據(jù)庫(kù)、管理MySQL用戶以及進(jìn)行數(shù)據(jù)庫(kù)備份和恢復(fù)等。而且MySQL提供了圖形化的管理工具,這使得對(duì)數(shù)據(jù)庫(kù)的操作更加簡(jiǎn)單。本節(jié)將為讀者介紹這些工具的作用。 1.4.1 MySQL的命令行實(shí)用工具 MySQL服務(wù)器端的實(shí)用工具程序如下。 (1) mysqld:SQL后臺(tái)程序(即MySQL服務(wù)器進(jìn)程)。該程序必須運(yùn)行之后,客戶端才能通過(guò)連接服務(wù)器來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。 (2) mysqld_safe:服務(wù)器啟動(dòng)腳本。在UNIX和NetWare中推薦使用mysqld_safe來(lái)啟動(dòng)mysqld服務(wù)器。mysqld_safe增加了一些安全特性,例如當(dāng)出現(xiàn)錯(cuò)誤時(shí),會(huì)重啟服務(wù)器并向錯(cuò)誤日志文件寫入運(yùn)行時(shí)間信息。 (3) mysql.server:服務(wù)器啟動(dòng)腳本。它調(diào)用mysqld_safe來(lái)啟動(dòng)MySQL服務(wù)器。 (4) mysqld_multi:服務(wù)器啟動(dòng)腳本,可以啟動(dòng)或停止系統(tǒng)上安裝的多個(gè)服務(wù)器。 (5) myisamchk:描述、檢查、優(yōu)化和維護(hù)MyISAM表的實(shí)用工具。 (6) mysql.server:服務(wù)器啟動(dòng)腳本。UNIX中的MySQL分發(fā)版包括mysql.server腳本。 (7) mysqlbug:MySQL缺陷報(bào)告腳本?梢杂盟鼇(lái)向MySQL郵件系統(tǒng)發(fā)送缺陷報(bào)告。 (8) mysql_install_db:該腳本用默認(rèn)權(quán)限創(chuàng)建MySQL授權(quán)表。通常只是在系統(tǒng)上首次安裝MySQL時(shí)執(zhí)行一次。 MySQL客戶端的實(shí)用工具程序如下。 (1) myisampack:壓縮MyISAM表以產(chǎn)生更小的只讀表的一個(gè)工具。 (2) mysql:交互式輸入SQL語(yǔ)句或以批處理模式執(zhí)行它們的命令行工具。 (3) mysqlaccess:檢查訪問(wèn)權(quán)限的主機(jī)名、用戶名和數(shù)據(jù)庫(kù)組合。 (4) mysqladmin:執(zhí)行管理操作的客戶程序,例如創(chuàng)建或刪除數(shù)據(jù)庫(kù),重載授權(quán)表,將表刷新到硬盤上,以及重新打開日志文件。mysqladmin還可以用來(lái)檢索版本、進(jìn)程,以及服務(wù)器的狀態(tài)信息。 (5) mysqlbinlog:從二進(jìn)制日志讀取語(yǔ)句的工具。在二進(jìn)制日志文件中包含執(zhí)行過(guò)的語(yǔ)句,可用來(lái)幫助系統(tǒng)從崩潰中恢復(fù)。 (6) mysqlcheck:檢查、修復(fù)、分析以及優(yōu)化數(shù)據(jù)表。 (7) mysqldump:將MySQL數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)到一個(gè)文件(例如SQL語(yǔ)句或Tab分隔符文本文件)的客戶程序。 (8) mysqlhotcopy:當(dāng)服務(wù)器在運(yùn)行時(shí),快速備份MyISAM或ISAM表的工具。 (9) mysql import:使用LOAD DATA INFILE將文本文件導(dǎo)入相關(guān)表的客戶程序。 (10) mysqlshow:顯示與數(shù)據(jù)庫(kù)、表、列以及索引相關(guān)的信息的客戶程序。 (11) perror:顯示系統(tǒng)或MySQL錯(cuò)誤代碼的含義的工具。 1.4.2 MySQL Workbench MySQL Workbench是下一代可視化數(shù)據(jù)庫(kù)設(shè)計(jì)軟件,它為數(shù)據(jù)庫(kù)管理員和開發(fā)人員提供了一整套可視化數(shù)據(jù)庫(kù)操作環(huán)境,主要功能如下。 * 數(shù)據(jù)庫(kù)設(shè)計(jì)和模型建立。 * SQL開發(fā)(取代MySQL Query Browser)。 * 數(shù)據(jù)庫(kù)管理(取代MySQL Administrator)。 MySQL Workbench有兩個(gè)版本: (1) MySQL Workbench Community Edition(也叫MySQL Workbench OSS,社區(qū)版),它是在GPL證書下發(fā)布的開源社區(qū)版本。 (2) MySQL Workbench Standard Edition(也叫MySQL Workbench SE,商業(yè)版),它是按年收費(fèi)的商業(yè)版本。 截至本書完稿時(shí),最新版本為MySQL Workbench 5.2.34。一些出版時(shí)間較早的MySQL教程中會(huì)提到圖形化的工具M(jìn)ySQL Query Browser和MySQL Administrator。隨著MySQL的發(fā)展,Oracle使用更高效、便捷的Workbench替換掉了這兩個(gè)工具,目前官方已經(jīng)不再提供MySQL Query Browser和MySQL Administrator的技術(shù)支持和更新,但是仍然可以在使用舊版本MySQL時(shí)使用它們。 1.5 高 手 甜 點(diǎn) 甜點(diǎn)1:如何快速掌握MySQL? 在學(xué)習(xí)MySQL數(shù)據(jù)庫(kù)之前,很多讀者都會(huì)問(wèn)如何才能更好地掌握MySQL的相關(guān)技能呢?下面就來(lái)講述學(xué)習(xí)MySQL的方法。 (1) 培養(yǎng)興趣。興趣是最好的老師,不論學(xué)習(xí)什么知識(shí),興趣都可以極大地提高學(xué)習(xí)效率,當(dāng)然學(xué)習(xí)MySQL也不例外。 (2) 夯實(shí)基礎(chǔ)。計(jì)算機(jī)領(lǐng)域的技術(shù)非常強(qiáng)調(diào)基礎(chǔ),剛開始學(xué)習(xí)可能還認(rèn)識(shí)不到這一點(diǎn),隨著技術(shù)應(yīng)用的深入,就會(huì)發(fā)現(xiàn)只有具有扎實(shí)的基礎(chǔ)功底,才能在技術(shù)的道路上走得更快、更遠(yuǎn)。對(duì)于MySQL的學(xué)習(xí)來(lái)說(shuō),SQL語(yǔ)句是其中最為基礎(chǔ)的部分,很多操作都是通過(guò)SQL語(yǔ)句來(lái)實(shí)現(xiàn)的。所以在學(xué)習(xí)的過(guò)程中,讀者要多編寫SQL語(yǔ)句,對(duì)于同一個(gè)功能,可以使用不同的實(shí)現(xiàn)語(yǔ)句來(lái)完成,從而能夠深刻理解其不同之處。 (3) 及時(shí)學(xué)習(xí)新知識(shí)。正確、有效地利用搜索引擎,可以搜索到很多關(guān)于MySQL的相關(guān)知識(shí)。同時(shí),參考別人解決問(wèn)題的思路,也可以吸取別人的經(jīng)驗(yàn),及時(shí)獲取最新的技術(shù)資料。 (4) 多實(shí)踐操作。數(shù)據(jù)庫(kù)系統(tǒng)具有極強(qiáng)的操作性,需要多動(dòng)手上機(jī)操作。在實(shí)際操作的過(guò)程中才能發(fā)現(xiàn)問(wèn)題,并思考解決問(wèn)題的方法和思路,只有這樣才能提高實(shí)戰(zhàn)能力。 甜點(diǎn)2:如何選擇數(shù)據(jù)庫(kù)? 選擇數(shù)據(jù)庫(kù)時(shí),需要考慮運(yùn)行的操作系統(tǒng)和管理系統(tǒng)的實(shí)際情況。一般情況下,要遵循以下原則: (1) 如果是開發(fā)大型的管理系統(tǒng),可以在Oracle、SQL Server、DB2中選擇;如果是開發(fā)中小型的管理系統(tǒng),可以在Access、MySQL、PostgreSQL中選擇。 (2) Access和SQL Server數(shù)據(jù)庫(kù)只能運(yùn)行在Windows系列的操作系統(tǒng)上,其與Windows系列的操作系統(tǒng)有很好的兼容性。Oracle、DB2、MySQL和PostgreSQL除了可以在Windows平臺(tái)上運(yùn)行外,還可以在Linux和UNIX平臺(tái)上運(yùn)行。 (3) Access、MySQL和PostgreSQL都非常容易使用,Oracle和DB2相對(duì)比較復(fù)雜,但是其性能比較好。 1.6 跟我學(xué)上機(jī) (1) 上網(wǎng)查詢常用的數(shù)據(jù)庫(kù)系統(tǒng)有哪些? (2) 上網(wǎng)了解MySQL 5.6的新功能和應(yīng)用。 (3) 學(xué)習(xí)常見(jiàn)的SQL語(yǔ)句。
你還可能感興趣
我要評(píng)論
|