本書(shū)主要內(nèi)容包括數(shù)據(jù)庫(kù)系統(tǒng)基礎(chǔ)知識(shí),MySQL數(shù)據(jù)庫(kù)基礎(chǔ)操作,SQL語(yǔ)言,視圖和索引的基本操作,存儲(chǔ)過(guò)程的基本操作,觸發(fā)器的基礎(chǔ)操作,數(shù)據(jù)庫(kù)完整性,數(shù)據(jù)庫(kù)備份與恢復(fù)等。
適讀人群 :本書(shū)主要面向數(shù)據(jù)庫(kù)初學(xué)者,適合作為高職高專(zhuān)院校和應(yīng)用型本科院校計(jì)算機(jī)專(zhuān)業(yè)、信息管理等相關(guān)專(zhuān)業(yè)的數(shù)據(jù)庫(kù)相關(guān)課程的教材、各種數(shù)據(jù)庫(kù)培訓(xùn)班的培訓(xùn)教材,還可作為MySQL應(yīng)用開(kāi)發(fā)人員的參考資料。
本書(shū)是作者根據(jù)多年來(lái)為企業(yè)進(jìn)行信息化建設(shè)的經(jīng)驗(yàn)編寫(xiě)而成的,采用任務(wù)驅(qū)動(dòng)的組織模式來(lái)解析數(shù)據(jù)庫(kù)原理,概念清楚、重點(diǎn)突出、內(nèi)容豐富、結(jié)構(gòu)合理、思路清晰、案例翔實(shí)。讀者通過(guò)逐步完成各個(gè)任務(wù),可以由淺入深地掌握數(shù)據(jù)庫(kù)的相關(guān)知識(shí)與技能,增強(qiáng)對(duì)基本概念的理解,培養(yǎng)實(shí)際動(dòng)手能力。
在信息技術(shù)廣泛應(yīng)用的今天,數(shù)據(jù)庫(kù)技術(shù)作為數(shù)據(jù)管理的核心技術(shù)在社會(huì)的各個(gè)領(lǐng)域發(fā)揮著強(qiáng)大的作用。本書(shū)是作者根據(jù)多年來(lái)為企業(yè)進(jìn)行信息化建設(shè)的經(jīng)驗(yàn)編寫(xiě)而成的,采用任務(wù)驅(qū)動(dòng)的組織模式來(lái)解析數(shù)據(jù)庫(kù)原理,概念清楚、重點(diǎn)突出、內(nèi)容豐富、結(jié)構(gòu)合理、思路清晰、案例翔實(shí)。讀者通過(guò)逐步完成各個(gè)任務(wù),可以由淺入深地掌握數(shù)據(jù)庫(kù)的相關(guān)知識(shí)與技能,增強(qiáng)對(duì)基本概念的理解,培養(yǎng)實(shí)際動(dòng)手能力。
全書(shū)共分為八個(gè)單元。單元1介紹數(shù)據(jù)庫(kù)的一些基本概念以及數(shù)據(jù)庫(kù)設(shè)計(jì)中的一些基本原理及注意事項(xiàng)。單元2介紹數(shù)據(jù)庫(kù)的操作,包括數(shù)據(jù)庫(kù)的創(chuàng)建、修改、刪除等操作。單元3介紹表的創(chuàng)建、修改、刪除及各種約束的定義。單元4介紹對(duì)創(chuàng)建的數(shù)據(jù)表進(jìn)行查詢操作,使用SELECT語(yǔ)句從一個(gè)或多個(gè)表中獲取數(shù)據(jù)。單元5介紹索引和視圖的應(yīng)用,是對(duì)數(shù)據(jù)庫(kù)表進(jìn)行查詢的優(yōu)化解決方案。單元6介紹觸發(fā)器的規(guī)劃和設(shè)計(jì),觸發(fā)器的設(shè)計(jì)合理與否,直接影響數(shù)據(jù)庫(kù)的性能和效率。單元7介紹存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的使用方法,是數(shù)據(jù)庫(kù)開(kāi)發(fā)的重要組成部分。單元8介紹數(shù)據(jù)庫(kù)管理及數(shù)據(jù)備份與還原,通過(guò)本單元的任務(wù)訓(xùn)練,可以掌握數(shù)據(jù)庫(kù)的基本維護(hù)方法。
本書(shū)主要面向數(shù)據(jù)庫(kù)初學(xué)者,適合作為高職高專(zhuān)院校和應(yīng)用型本科院校的數(shù)據(jù)庫(kù)相關(guān)課程的教材、各種數(shù)據(jù)庫(kù)培訓(xùn)班的培訓(xùn)教材,還可作為MySQL應(yīng)用開(kāi)發(fā)人員的參考資料。
本書(shū)由武漢城市職業(yè)學(xué)院的張吉力、張喻平、關(guān)麗梅主編,副主編為武漢城市職業(yè)學(xué)院的黃濤、吳強(qiáng)。本書(shū)的編寫(xiě)分工為:?jiǎn)卧?和單元4由張吉力編寫(xiě),單元6和單元7由張喻平編寫(xiě),單元1、單元2和單元5由關(guān)麗梅編寫(xiě),單元8由黃濤編寫(xiě),附錄由吳強(qiáng)編寫(xiě)。全書(shū)由張吉力、張喻平負(fù)責(zé)規(guī)劃各章節(jié)內(nèi)容并完成全書(shū)的修改和統(tǒng)稿工作。此外,參與本書(shū)資料搜集和整理的還有王社、魏鄖華、胡凱、蔡振等人,在此對(duì)他們表示衷心的感謝。
為了方便教學(xué),本書(shū)還配有電子課件等教學(xué)資源包,相關(guān)教師和學(xué)生可以登錄“我們愛(ài)讀書(shū)”網(wǎng)(www.ibook4us.com)免費(fèi)注冊(cè)下載,或者發(fā)郵件至hustpeiit@163.com免費(fèi)索取。
由于作者水平有限,書(shū)中難免有疏漏及不足之處,懇請(qǐng)廣大讀者不吝提出寶貴意見(jiàn),幫助我們改正提高。
編者2016年6月
單元1MySQL數(shù)據(jù)庫(kù)基礎(chǔ)
1.1數(shù)據(jù)模型的規(guī)劃設(shè)計(jì)
1.2數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)
單元2數(shù)據(jù)庫(kù)操作
2.1創(chuàng)建數(shù)據(jù)庫(kù)
2.2操作數(shù)據(jù)庫(kù)
單元3表操作
3.1使用SQL語(yǔ)句管理表
3.2使用SQL語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)更新
3.3MySQL中的數(shù)據(jù)完整性約束
單元4查詢操作
4.1單表查詢
4.2多表連接查詢
4.3子查詢
單元5索引和視圖
5.1索引的創(chuàng)建
5.2索引的刪除
5.3創(chuàng)建視圖
5.4操作視圖
單元6觸發(fā)器
6.1創(chuàng)建觸發(fā)器
6.2查看觸發(fā)器
6.3觸發(fā)器的應(yīng)用
6.4刪除觸發(fā)器
單元7存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
7.1創(chuàng)建及調(diào)用存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
7.2查看存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
7.3修改存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
7.4流程控制語(yǔ)句的使用
7.5游標(biāo)的使用
7.6刪除存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)
單元8數(shù)據(jù)庫(kù)管理及數(shù)據(jù)備份與還原
8.1使用mysql命令及SQL語(yǔ)句進(jìn)行MySQL用戶管理
8.2使用mysqldump及mysql命令進(jìn)行簡(jiǎn)單的數(shù)據(jù)備份與還原
8.3查看和刪除MySQL日志
附錄AMySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型列表
附錄BMySQL運(yùn)算符
附錄CMySQL函數(shù)
(1) 理解數(shù)據(jù)庫(kù)的結(jié)構(gòu)。 (2) 了解MySQL數(shù)據(jù)庫(kù)的字符集和校對(duì)規(guī)則。 (3) 了解創(chuàng)建和管理數(shù)據(jù)庫(kù)的SQL語(yǔ)法。 (1) 能運(yùn)用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)。 (2) 能運(yùn)用SQL語(yǔ)句設(shè)置MySQL字符集和校對(duì)規(guī)則。 (3) 能運(yùn)用SQL語(yǔ)句管理數(shù)據(jù)庫(kù)。
2.1 創(chuàng)建數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)可以看成是一個(gè)存儲(chǔ)數(shù)據(jù)對(duì)象的容器,這些數(shù)據(jù)對(duì)象包括表、視圖、觸發(fā)器、存儲(chǔ)過(guò)程等。因此,必須先創(chuàng)建數(shù)據(jù)庫(kù),然后才能創(chuàng)建其他數(shù)據(jù)對(duì)象。 【任務(wù)一】創(chuàng)建一個(gè)名為student的數(shù)據(jù)庫(kù)。 【代碼】 CREATE DATABASE student; 回車(chē)后系統(tǒng)提示Query OK,即命令被正確執(zhí)行。 如果再次鍵入以上創(chuàng)建數(shù)據(jù)庫(kù)命令,系統(tǒng)將提示出錯(cuò)信息,因?yàn)镸ySQL不允許兩個(gè)數(shù)據(jù)庫(kù)同名。要避免出現(xiàn)重復(fù)創(chuàng)建的錯(cuò)誤提示,可以在命令中添加IF NOT EXISTS選項(xiàng)。 CREATE DATABASE IF NOT EXISTS student; 【任務(wù)二】創(chuàng)建一個(gè)名為book的數(shù)據(jù)庫(kù),采用字符集gb2312和校對(duì)規(guī)則gb2312_chinese_ci。 【代碼】 CREATE DATABASE book DEFAULTCHARACTER SET gb2312 COLLATEgb2312_chinese_ci; 【任務(wù)三】 顯示數(shù)據(jù)庫(kù)。 【代碼】 SHOWDATABASES 【知識(shí)點(diǎn)】
1. 創(chuàng)建數(shù)據(jù)庫(kù) MySQL安裝后,系統(tǒng)自動(dòng)創(chuàng)建information_scema和MySQL數(shù)據(jù)庫(kù),這是系統(tǒng)數(shù)據(jù)庫(kù),MySQL數(shù)據(jù)庫(kù)的系統(tǒng)信息都存儲(chǔ)在這兩個(gè)數(shù)據(jù)庫(kù)中。若刪除了這些系統(tǒng)數(shù)據(jù)庫(kù),MySQL就不能正常工作。而對(duì)于用戶的數(shù)據(jù),需要?jiǎng)?chuàng)建新的數(shù)據(jù)庫(kù)來(lái)存放。 使用CREATE DATABASE或CREATE SCHEMA命令創(chuàng)建數(shù)據(jù)庫(kù)。 語(yǔ)法格式: CREATE {DATABASE|SCHEMA}\[IF NOT EXISTS\]數(shù)據(jù)庫(kù)名 \[DEFAULT\] CHARACTER SET 字符集名 \[DEFAULT\] COLLATE 校對(duì)規(guī)則名\] 語(yǔ)法格式說(shuō)明: “{ | }”表示二選一,“\[ \]”內(nèi)為可選項(xiàng)。 句中的大寫(xiě)單詞為命令動(dòng)詞,輸入時(shí)不能更改命令動(dòng)詞,但MySQL命令解釋器對(duì)大小寫(xiě)不敏感。 語(yǔ)法說(shuō)明: 數(shù)據(jù)庫(kù)名必須符合操作系統(tǒng)文件及文件夾命名規(guī)則,不區(qū)分大小寫(xiě)。 IF NOT EXISTS,創(chuàng)建數(shù)據(jù)庫(kù)要先判斷該名稱(chēng)的數(shù)據(jù)庫(kù)是否已存在,只有不存在才能創(chuàng)建。 DEFAULT, 指定默認(rèn)值。 CHARACTER SET,指定數(shù)據(jù)庫(kù)字符集,其后的字符集名要用MySQL支持的具體字符集名稱(chēng)。 COLLATE,指定字符集的校對(duì)規(guī)則,其后的校對(duì)規(guī)則名要用MySQL支持的具體校對(duì)規(guī)則名稱(chēng)。 根據(jù)CREATE DATABASE的語(yǔ)法格式,在不使用“\[ \]”內(nèi)的可選項(xiàng),將“{ | }”中的二選一選定為DATABASE的情況下,創(chuàng)建數(shù)據(jù)庫(kù)的最簡(jiǎn)格式為CREATE DATABASE。
2. MySQL中的字符集和校對(duì)規(guī)則 字符集是一套符號(hào)和編碼的規(guī)則,不論是在Oracle數(shù)據(jù)庫(kù)還是在MySQL數(shù)據(jù)庫(kù),都存在字符集的選擇問(wèn)題。如果在數(shù)據(jù)庫(kù)創(chuàng)建階段沒(méi)有正確選擇字符集,那么可能在后期需要更換字符集,而字符集的更換是代價(jià)比較高的操作,也存在一定的風(fēng)險(xiǎn)。所以,我們推薦在應(yīng)用開(kāi)始階段,就按照需求正確地選擇合適的字符集,避免后期不必要的調(diào)整。 MySQL服務(wù)器可以支持多種字符集(可以用SHOW CHARACTER SET命令查看所有MySQL支持的字符集),在同一臺(tái)服務(wù)器、同一個(gè)數(shù)據(jù)庫(kù)甚至同一個(gè)表的不同字段都可以指定使用不同的字符集,相比Oracle等其他數(shù)據(jù)庫(kù)管理系統(tǒng),在同一個(gè)數(shù)據(jù)庫(kù)只能使用相同的字符集,MySQL明顯存在更大的靈活性。 MySQL的字符集包括字符集(CHARACTER)和校對(duì)規(guī)則(COLLATION)兩個(gè)概念。字符集用來(lái)定義MySQL存儲(chǔ)字符串的方式,校對(duì)規(guī)則定義了比較字符串的方式。字符集和校對(duì)規(guī)則是一對(duì)多的關(guān)系, MySQL支持30多種字符集的70多種校對(duì)規(guī)則。 每個(gè)字符集至少對(duì)應(yīng)一個(gè)校對(duì)規(guī)則。可以用“SHOW COLLATION LIKEutf8%;”命令查看相關(guān)字符集的校對(duì)規(guī)則。 建議在能夠完全滿足應(yīng)用的前提下,盡量使用小的字符集。因?yàn)樾〉淖址馕吨軌蚬?jié)省空間,減少網(wǎng)絡(luò)傳輸字節(jié)數(shù),同時(shí)存儲(chǔ)空間的較小間接地提高了系統(tǒng)的性能。 有很多字符集可以保存漢字,比如utf8、gb2312、gbk、latin1等,但是常用的是gb2312和gbk。因?yàn)間b2312字庫(kù)比gbk字庫(kù)小,有些偏僻字(例如:洺)不能保存,因此在選擇字符集的時(shí)候一定要權(quán)衡這些偏僻字在應(yīng)用中出現(xiàn)的概率以及造成的影響,不能確定滿足要求時(shí)最好選用gbk。 MySQL的字符集和校對(duì)規(guī)則有4個(gè)級(jí)別的默認(rèn)設(shè)置:服務(wù)器級(jí)、數(shù)據(jù)庫(kù)級(jí)、表級(jí)和字段級(jí)。它們分別在不同的地方設(shè)置,作用也不相同。 服務(wù)器字符集和校對(duì)規(guī)則,在MySQL服務(wù)啟動(dòng)的時(shí)候確定?梢栽趍y.cnf中設(shè)置: \[mysqld\] default-character-set=utf8 或者在啟動(dòng)選項(xiàng)中指定: mysqld --default-character-set=utf8 或者在編譯的時(shí)候指定: ./configure --with-charset=utf8 如果沒(méi)有特別地指定服務(wù)器字符集,默認(rèn)使用latin1作為服務(wù)器字符集。上面三種設(shè)置的方式都只指定了字符集utf8,沒(méi)有指定校對(duì)規(guī)則,這樣就使用該字符集默認(rèn)的校對(duì)規(guī)則。如果要使用該字符集的非默認(rèn)校對(duì)規(guī)則,則需要在指定字符集的同時(shí)指定校對(duì)規(guī)則。 【例21】使用gbk字符集和校對(duì)規(guī)則。 CREATEDATABASE test DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; 【例22】使用utf8字符集和校對(duì)規(guī)則。 CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 3. 顯示系統(tǒng)已創(chuàng)建的數(shù)據(jù)庫(kù)名稱(chēng) 語(yǔ)法格式: SHOWDATABASES 語(yǔ)法說(shuō)明: 該命令沒(méi)有參數(shù),執(zhí)行后將系統(tǒng)所有已存在的數(shù)據(jù)庫(kù)名列出來(lái)。
2.2 操作數(shù)據(jù)庫(kù) 【任務(wù)四】打開(kāi)student數(shù)據(jù)庫(kù)。 【代碼】 USE student; 【任務(wù)五】修改數(shù)據(jù)庫(kù)book,將默認(rèn)字符集改為latin1,校對(duì)規(guī)則改為latin1_swedish_ci。 【代碼】 ALTER DATABASE book DEFAULTCHARACTER SET latin1 COLLATElatin1_swedish_ci; 【任務(wù)六】刪除數(shù)據(jù)庫(kù)book。 【代碼】 DROPDATABASEbook; 【知識(shí)點(diǎn)】
1. 打開(kāi)數(shù)據(jù)庫(kù) 創(chuàng)建了數(shù)據(jù)庫(kù)以后可以用USE命令指定它為當(dāng)前數(shù)據(jù)庫(kù)并使用它,語(yǔ)法如下: USE數(shù)據(jù)庫(kù)名
2. 修改數(shù)據(jù)庫(kù) 若要修改數(shù)據(jù)庫(kù)的參數(shù),可以使用ALTERDATABASE命令。 語(yǔ)法格式: ALTER {DATABASE | SCHEMA} \[數(shù)據(jù)庫(kù)名\] \[DEFAULT\] CHARACTER SET 字符集名 | \[DEFAULT\] COLLATE 校對(duì)規(guī)則名 語(yǔ)法說(shuō)明: (1) 數(shù)據(jù)庫(kù)名稱(chēng)可以忽略,此時(shí),語(yǔ)句對(duì)應(yīng)于默認(rèn)數(shù)據(jù)庫(kù)。 (2) CHARACTER SET,用于更改默認(rèn)的數(shù)據(jù)庫(kù)字符集。 (3) COLLATE,是校對(duì)集的意思,可以理解為排序規(guī)則等,用于更改默認(rèn)的數(shù)據(jù)庫(kù)字符校對(duì)規(guī)則。 MySQL這樣選擇數(shù)據(jù)庫(kù)字符集和數(shù)據(jù)庫(kù)校對(duì)規(guī)則: ① 如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校對(duì)規(guī)則Y; ② 如果指定了CHARACTER SET X而沒(méi)有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默認(rèn)校對(duì)規(guī)則; ③ 如果沒(méi)有指定字符集,則采用服務(wù)器字符集和服務(wù)器校對(duì)規(guī)則。 ALTER DATABASE用于更改數(shù)據(jù)庫(kù)的全局特性。這些特性儲(chǔ)存在數(shù)據(jù)庫(kù)目錄中的db.opt文件中。要使用ALTER DATABASE,需要獲得數(shù)據(jù)庫(kù)ALTER權(quán)限。
3. 刪除數(shù)據(jù)庫(kù) 刪除已經(jīng)創(chuàng)建的數(shù)據(jù)庫(kù)可以使用DROP DATABASE命令。 語(yǔ)法格式: DROPDATABASE \[ IF EXISTS \] 數(shù)據(jù)庫(kù)名 語(yǔ)法說(shuō)明: IF EXISTS,檢測(cè)數(shù)據(jù)庫(kù)是否存在,不存在時(shí)不刪除也不報(bào)錯(cuò)。 【注意】使用DROP DATABASE 命令時(shí)要小心,因?yàn)樗鼘⒂谰脛h除數(shù)據(jù)庫(kù)的信息,包括其中所有的表和數(shù)據(jù)。