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