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