MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案_第1頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案_第2頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案_第3頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案_第4頁
MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、MySQL數(shù)據(jù)庫基礎(chǔ)與實例教程練習(xí)題參考答案由于時間倉促,答案中難免存在錯誤,不妥之處懇請讀者批評指正!第一章答案1 數(shù)據(jù)庫管理系統(tǒng)中常用的數(shù)學(xué)模型有哪些?數(shù)據(jù)庫管理系統(tǒng)通常會選擇某種“數(shù)學(xué)模型”存儲、組織、管理數(shù)據(jù)庫中的數(shù)據(jù),常用 的數(shù)學(xué)模型包括“層次模型”、“網(wǎng)狀模型”、“關(guān)系模型”以及“面向?qū)ο竽P汀钡取?您聽說過的關(guān)系數(shù)據(jù)庫管理系統(tǒng)有哪些?數(shù)據(jù)庫容器中通常包含哪些數(shù)據(jù)庫對象?目前成熟的關(guān)系數(shù)據(jù)庫管理系統(tǒng)主要源自歐美數(shù)據(jù)庫廠商,典型的有美國微軟公司的SQL Server、美國IBM 公司的DB2和Informix、德國SAP公司的Sybase 美國甲骨文公司 的 Oracle。數(shù)據(jù)庫容器

2、中通常包含表、索引、視圖、存儲過程、觸發(fā)器、函數(shù)等數(shù)據(jù)庫對象。3 通過本章知識的講解,SQL與程序設(shè)計語言有什么關(guān)系?SQL并不是一種功能完善的程序設(shè)計語言,例如,不能使用SQL構(gòu)建人性化的圖形用戶界面(Graphical User In terface, GUI),程序員需要借助 Java、VC+等面向?qū)ο蟪绦蛟O(shè) 計語言或者 HTML的FORM表單構(gòu)建圖形用戶界面(GUI )。如果選用 FORM表單構(gòu)建 GUI,程序員還需要使用 JSP、PHP或者.NET編寫 Web應(yīng)用程序,處理 FORM表單中的數(shù) 據(jù)以及數(shù)據(jù)庫中的數(shù)據(jù)。其他答案:1、首先SQL語言是數(shù)據(jù)庫結(jié)構(gòu)化查詢語言,是非過程化編程語

3、言。而程序設(shè)計語言則有更多的面向?qū)ο蠹斑壿嫵绦蛟O(shè)計。比如用SQL語言編寫圖形用戶界面(例如窗口、進度條),是無法實現(xiàn)的。2、SQL語言可以說是,程序設(shè)計語言和數(shù)據(jù)庫之間的一個翻譯官。程序設(shè)計語言需要操作數(shù)據(jù)庫時,需要借助(或者說調(diào)用)SQL語言來翻譯給數(shù)據(jù)庫管理系統(tǒng)。3、不同數(shù)據(jù)庫管理系統(tǒng)會有一些特殊的SQL規(guī)范,比如limit關(guān)鍵詞在SQL Server中無法使用。而這些規(guī)范與程序設(shè)計語言無關(guān)。4.通過本章的學(xué)習(xí),您了解的MySQL有哪些特點?與題目2中列舉的商業(yè)化數(shù)據(jù)庫管理系統(tǒng)相比,MySQL具有開源、免費、體積小、便于安裝,但功能強大等特點。5通過本章的學(xué)習(xí),您覺得數(shù)據(jù)庫表與電子表格(例

4、如Excel)有哪些區(qū)別?限于本章的知識點:外觀上,關(guān)系數(shù)據(jù)庫中的一個數(shù)據(jù)庫表和一個不存在“合并單元格”的電子表格(例如Excel)相同。與電子表格不同的是:同一個數(shù)據(jù)庫表的字段名不能重復(fù)。為了優(yōu)化存儲空間以及便于數(shù)據(jù)排序,數(shù)據(jù)庫表的每一列必須指定某種數(shù)據(jù)類型。關(guān)系數(shù)據(jù)庫中的表是由列和行構(gòu)成的,和電子表格不同的是, 數(shù)據(jù)庫表要求表中的每一行記錄都必須是唯一的,即在同一張數(shù)據(jù)庫表中不允許出現(xiàn)完全相同的兩條記錄。6您所熟知的數(shù)據(jù)庫設(shè)計輔助工具有哪些?您所熟知的模型、工具、技術(shù)有哪些?數(shù)據(jù)庫設(shè)計輔助工有數(shù)據(jù)模型、數(shù)據(jù)建模工具、關(guān)系數(shù)據(jù)庫設(shè)計技術(shù)。其中常用的數(shù)據(jù) 模型有ER模型和類圖;常用的數(shù)據(jù)建模工

5、具如 ERwin、PowerDesigner、Visio等;常用的 關(guān)系數(shù)據(jù)庫設(shè)計技術(shù)如數(shù)據(jù)庫規(guī)范化技術(shù)。1 模型數(shù)據(jù)模型有E-R圖或者類圖等數(shù)據(jù)模型。業(yè)務(wù)模型有程序流程圖、數(shù)據(jù)流程圖DFD、時序圖、狀態(tài)圖等業(yè)務(wù)模型。2 工具軟件項目管理工具如美國微軟公司的 Project,數(shù)據(jù)建模工具如 ERwin、PowerDesigner、 Visio,業(yè)務(wù)建模工具如 PowerDesigner、Rational Rose 以及 Visio 等。IDE 工具有 VC+6.0、 Visual Studio、Eclipse 以及 NetBeans 等。測試工具有 Junit 單元測試工具、 QuickTes

6、t Professional功能測試工具以及 LoadRunner性能測試工具等。3 .技術(shù)軟件開發(fā)時常用的技術(shù)包括:面向?qū)ο蠓治龊驮O(shè)計技術(shù)、結(jié)構(gòu)化分析和設(shè)計技術(shù)、軟件測試技術(shù)和關(guān)系數(shù)據(jù)庫設(shè)計技術(shù)等。7 請您羅列出“選課系統(tǒng)”需要實現(xiàn)哪些功能,使用數(shù)據(jù)庫技術(shù)能夠解決“選課系統(tǒng)” 中的哪些商業(yè)問題?“選課系統(tǒng)”中存在的商業(yè)問題(等于“選課系統(tǒng)”需要實現(xiàn)的功能):如何存儲以及維護課程、學(xué)生、教師以及班級的詳細(xì)信息?不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)分課程?如何控制每位教師只能申報一門選修課程?如何控制每門課程的人數(shù)上限在(60、150、230)中取值?如何控制每一門課程的選課

7、學(xué)生總?cè)藬?shù)不超過該課程的人數(shù)上限? 如何實現(xiàn)學(xué)生選課功能、退選功能以及調(diào)課功能? 如何控制每位學(xué)生最多可以選修兩門課程,且兩門課程不能相同? 系統(tǒng)如何自動記錄學(xué)生的選課時間?如何統(tǒng)計每一門課程還可以供多少學(xué)生選修?如何統(tǒng)計人數(shù)已經(jīng)報滿的課程?如何統(tǒng)計某一個教師已經(jīng)申報了哪些課程?如何統(tǒng)計某一個學(xué)生已經(jīng)選修了多少門課程,是哪些課程?如何統(tǒng)計選修人數(shù)少于 30人的所有課程信息?如何統(tǒng)計選修每一門課程的所有學(xué)生信息?課程信息刪除后,如何保證選擇該課程的學(xué)生可以選修其他課程?如何通過搜索關(guān)鍵字檢索自己感興趣的課程信息?&您所熟知的編碼規(guī)范有哪些?1.命名規(guī)范2注釋3書寫規(guī)范(縮進規(guī)范)9您是如

8、何理解“ E-R圖中實體間的關(guān)系是雙向的”?能不能舉個例子?請參看1.3.1章節(jié)的內(nèi)容。10 E-R圖中,什么是基數(shù)?什么是元?什么是關(guān)聯(lián)?請參看1.3.2章節(jié)的內(nèi)容。11 E-R圖的設(shè)計原則是什么?您是怎么理解E-R圖的設(shè)計原則的?請參看1.3.3章節(jié)數(shù)據(jù)庫開發(fā)人員通常采用“一事一地”的原則的內(nèi)容。12關(guān)系數(shù)據(jù)庫的設(shè)計步驟是什么?為每張表定義一個主鍵有技巧可循嗎?主鍵與關(guān)鍵字有什么關(guān)系?關(guān)系數(shù)據(jù)庫的設(shè)計步驟,請參看1.4章節(jié)的內(nèi)容。為每張表定義一個主鍵技巧,請參看142章節(jié)的內(nèi)容。主鍵與關(guān)鍵字有什么關(guān)系,請參看 1.4.2章節(jié)的內(nèi)容。12. 在關(guān)系數(shù)據(jù)庫設(shè)計過程中,如何表示E-R圖中的1:1

9、、1:m、m:n關(guān)系? 請參看143以及144章節(jié)的內(nèi)容。13. 在數(shù)據(jù)庫管理系統(tǒng)中,您所熟知的數(shù)據(jù)類型有哪些?每一種數(shù)據(jù)類型能不能各 -些例子?請參看1.4.5章節(jié)的內(nèi)容。14. 您所熟知的約束條件有哪些? MySQL支持哪些約束條件?請參看1.4.6章節(jié)的內(nèi)容。 MySQL支持主鍵(primary key )約束、外鍵(foreign key ) 約束、唯一性()約束、默認(rèn)值(default)約束、非空()約束。15. 數(shù)據(jù)庫中數(shù)據(jù)冗余的“并發(fā)癥”有哪些,能不能列舉一些例子?數(shù)據(jù)冗余“并發(fā)癥”插入有異常、刪除異常、修改復(fù)雜。例子參看1.4.8章節(jié)的內(nèi)容。16. 如何避免數(shù)據(jù)冗余?什么是1N

10、F、2NF、3NF ?使用規(guī)范化減少數(shù)據(jù)冗余請參看1.4.8章節(jié)的內(nèi)容。17. 根據(jù)本章的場景描述一一“很多團購網(wǎng)站在網(wǎng)上對房源進行出租”的E-R圖,請 設(shè)計該場景描述的數(shù)據(jù)庫表。團購網(wǎng)站(網(wǎng)站ID,網(wǎng)址)房源(房間號,房型)顧客(顧客號)出租(出租ID,網(wǎng)站ID,房間號,顧客號)19. 如果將學(xué)生student表設(shè)計為如下表結(jié)構(gòu):(student _no,student _no,student _name,student _contact,class _no,department _name)請用數(shù)據(jù)庫規(guī)范化的知識解釋該表是否滿足3NF范式的要求?該表是否存在數(shù)據(jù)冗余?是否會產(chǎn)生諸如插入異常

11、、刪除異常、修改復(fù)雜等數(shù)據(jù)冗余“并發(fā)癥”?此題題目中的學(xué)生 student表存在問題。建議將學(xué)生student表修改為如下結(jié)構(gòu)。學(xué)號姓名 性別 課程號 課程名|成績 課程號|課程名|成績 居住地| 郵編請參看1.4.8章節(jié)的內(nèi)容。20. 在“選課系統(tǒng)”中,學(xué)生選課時,由于每一門課程受到教室座位數(shù)的限制,每一門 課程設(shè)置了人數(shù)上限,如何確保每一門課程選報學(xué)生的人數(shù)不超過人數(shù)上限?有幾種設(shè)計方 案?這些設(shè)計方案的區(qū)別在哪里?請參看1.4.9章節(jié)的內(nèi)容。21. “選課系統(tǒng)”有幾張表,每個表有哪些字段?teacher(teacher_ no,teacher_ name ,teacher_con tac

12、t) classes(class_ no ,class_ name, departme nt_n ame) course(course_no ,course_name, up_limit,description,status,teacher_no)stude nt(stude nt_no, stude nt_n ame, stude nt_con tact,class_ no) choose(choose_ no ,stude nt_no char(11),course_ no ,score,choose_time)題。22. 依據(jù)自己所掌握的知識,描述如何使用數(shù)據(jù)庫技術(shù)解決“選課系統(tǒng)”問題域

13、中的問如何存儲以及維護課程、學(xué)生、教師以及班級的詳細(xì)信息?答:course、student、teacher、classes表可以用于存儲以及維護課程、學(xué)生、教師 以及班級的詳細(xì)信息。不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)分課程?答:如果需求要求:不同教師申報的課程名不能相同,則可以通過將course表的course_name字段設(shè)置為 unique約束即可。如果需求要求:不同教師申報的課程名可以相同,此時可以通過給course表添加course_id (無任何邏輯意義)主鍵字段,標(biāo)記不同教師申報的課程。如何控制每位教師只能申報一門選修課程?請參看143章節(jié)的“情形二”內(nèi)容。如

14、何控制每門課程的人數(shù)上限在(60、150、230)中取值?答:MySQL目前不正常check約束。但該問題可以借助MySQL觸發(fā)器解決,該題超出本章知識點內(nèi)容,請參看觸發(fā)器章節(jié)內(nèi)容。如何控制每一門課程的選課學(xué)生總?cè)藬?shù)不超過該課程的人數(shù)上限?請參看149章節(jié)的內(nèi)容。如何實現(xiàn)學(xué)生選課功能、退選功能以及調(diào)課功能?答:該問題可以借助 MySQL存儲過程、事務(wù)解決,該題超出本章知識點內(nèi)容,請 參看存儲過程章節(jié)以及事務(wù)章節(jié)的內(nèi)容。如何控制每位學(xué)生最多可以選修兩門課程,且兩門課程不能相同?答:該問題可以借助 MySQL存儲過程解決,該題超出本章知識點內(nèi)容,請參看存 儲過程章節(jié)內(nèi)容。系統(tǒng)如何自動記錄學(xué)生的選課

15、時間?答:借助 MySQL的now()函數(shù)。如何統(tǒng)計每一門課程還可以供多少學(xué)生選修?如何統(tǒng)計人數(shù)已經(jīng)報滿的課程?如何統(tǒng)計某一個教師已經(jīng)申報了哪些課程?如何統(tǒng)計某一個學(xué)生已經(jīng)選修了多少門課程,是哪些課程?如何統(tǒng)計選修人數(shù)少于 30人的所有課程信息?如何統(tǒng)計選修每一門課程的所有學(xué)生信息?答:上述統(tǒng)計信息超出本章知識點內(nèi)容,請參看表記錄的檢索章節(jié)內(nèi)容。課程信息刪除后,如何保證選擇該課程的學(xué)生可以選修其他課程?答:可以通過外鍵約束級聯(lián)刪除實現(xiàn),也可以通過觸發(fā)器實現(xiàn)。如何通過搜索關(guān)鍵字檢索自己感興趣的課程信息?答:通過全文檢索或者模糊查詢like關(guān)鍵字實現(xiàn)。第二章答案1通過本章的學(xué)習(xí),您了解的 MySQ

16、L 有哪些特點?答:請參看 2.1.1 章節(jié)內(nèi)容。2請您簡單描述 MySQL 的使用流程。 什么是 MySQL 客戶機?登錄主機與 MySQL 客 戶機有什么關(guān)系?什么是 MySQL 會話?答:請參看 2.1.1 章節(jié)內(nèi)容。MySQL 客戶機:與 MySQL 服務(wù)器通話的客戶端不止一種,比如 Windows 操作系統(tǒng)下 的命令行,可以直接通過命令建立與 mysql 數(shù)據(jù)庫的通話,另外還有 phpmyadmin 、 MySQL 等圖形化界面連接方式等。 本書經(jīng)常使用的 MySQL 客戶機程序 mysql.exe 存放在 C:Program FilesMySQLMySQL Server 5.6bi

17、n 目錄。在一臺登錄主機上可以開啟多個 MySQL 客戶機。數(shù)據(jù)庫用戶訪問 MySQL 服務(wù)器的數(shù)據(jù)時,首先需要選擇一臺登錄主機,然后在該登錄 主機上開啟 MySQL 客戶機, 輸入正確的賬戶名、 密碼, 建立一條 MySQL 客戶機與 MySQL 服務(wù)器之間的“通信鏈路”。通信鏈路斷開之前, MySQL 客戶機可以向 MySQL 服務(wù)器發(fā)送 多次“請求”, MySQL 服務(wù)器會對每一次請求做出“響應(yīng)”,請求 /響應(yīng)期間稱為 MySQL 會 話。3通過 Google 或者 Baidu 搜索引擎,搜索常用的 MySQL 客戶端工具 (或者客戶機程序) 有哪些。答案參見知乎,網(wǎng)址: 4 MySQL

18、 服務(wù)、 MySQL 服務(wù)實例、 MySQL 服務(wù)器分別是什么?什么是端口號?端 口號有什么作用?答:請參看 2.1.1 章節(jié)內(nèi)容。5請列舉 my.ini 配置文件中常用的參數(shù)選項組以及參數(shù)信息。答:請參看 2.1.5 章節(jié)內(nèi)容。6啟動 MySQL 服務(wù)的方法有哪些?停止 MySQL 服務(wù)的方法有哪些?答:請參看 2.1.4 章節(jié)內(nèi)容。7 MySQL 客戶機連接 MySQL 服務(wù)器的方法有哪些?連接 MySQL 服務(wù)器時,需提供哪些 信息?答:請參看 2.1.7 章節(jié)內(nèi)容。8字符、字符集、字符序分別是什么?字符序的命名規(guī)則是什么?答:請參看 2.2.1 章節(jié)內(nèi)容。9您所熟知的字符集、字符序有哪

19、些?它們之間有什么區(qū)別?答:請參看 2.2.2 章節(jié)內(nèi)容。10請簡述 MySQL 字符集的轉(zhuǎn)換過程。答:請參看 2.2.3 章節(jié)內(nèi)容。11 MySQL 系統(tǒng)數(shù)據(jù)庫有哪些?這些系統(tǒng)數(shù)據(jù)庫有什么作用?答:請參看 2.2.1 章節(jié)內(nèi)容。12如果僅僅需要在數(shù)據(jù)庫中存儲中文簡體字符,那么如何設(shè)置MySQL 字符集?答:請參看 2.2.4 章節(jié)內(nèi)容。13請自己編寫一段 SQL 腳本文件,并運行該腳本文件中的代碼。答:請參看 2.2.5 章節(jié)內(nèi)容。14您所熟知的存儲引擎有哪些? MyISAM 存儲引擎與 InnoDB 存儲引擎相比, 您更喜 歡哪一個?它們都有什么特點?答:請參看241章節(jié)內(nèi)容。15.創(chuàng)建s

20、tudent數(shù)據(jù)庫,并在該數(shù)據(jù)庫中創(chuàng)建student表,用于保存您的個人信息(如姓名、性別、身份證號、出生日期等),并完成下列操作或問題。1) 上述的student表有沒有出現(xiàn)數(shù)據(jù)冗余現(xiàn)象?(提示:出生日期可以由身份證號推算 得出)答:出生日期可由身份證號計算得出,所以上述的stude nt表存在數(shù)據(jù)冗余現(xiàn)象。2)student數(shù)據(jù)庫目錄存放在數(shù)據(jù)庫根目錄中,默認(rèn)情況下,根目錄是什么?答:使用命令“ show variables like 'datadir:"可以查看參數(shù) datadir的值。默認(rèn)安裝 MySQL 后,數(shù)據(jù)庫根目錄 datadir 的值為 “ C:/Docum

21、e nts and Sett in gs/AII Users/Application Data/MySQL/MySQL Server 5.6/Data/ ”。3)如何查看student數(shù)據(jù)庫的結(jié)構(gòu)。答:請參看2.3.3章節(jié)內(nèi)容。4)如何查看student表的結(jié)構(gòu),并查看該表的默認(rèn)字符集、字符序、存儲引擎等信息。答:請參看2.4.4章節(jié)內(nèi)容。5)student數(shù)據(jù)庫目錄中存放了哪些文件?數(shù)據(jù)庫根目錄中存放了哪些文件? 答:請參看2.4.1章節(jié)內(nèi)容。stude nt數(shù)據(jù)庫目錄中存放了如下文件:(1)數(shù)據(jù)庫文件(如db.opt)(2)表名、后綴名為frm的表結(jié)構(gòu)定義文件(3)如果student數(shù)據(jù)庫

22、中存在InnoDB存儲引擎的獨享表空間的表,則student數(shù)據(jù)庫目錄中還會存放一個名為"表名.ibd”的數(shù)據(jù)文件。(4)如果student數(shù)據(jù)庫中存在MylSAM存儲引擎的表,則student數(shù)據(jù)庫目錄中會 存在一個文件名為表名、后綴名為 MYD (即MYData的簡寫)的數(shù)據(jù)文件以及文件名 為表名、后綴名為MYI (即MYIndex的簡寫)的索引文件。數(shù)據(jù)庫根目錄中存放如下文件以及目錄(如下圖所示):數(shù)據(jù)庫目錄(例如test數(shù)據(jù)庫目錄、stude nt數(shù)據(jù)庫目錄)ib_logfileO及ibogfile1是重做日志文件InnoDB共享表空間文件ibdata1文件mysql-bi

23、n.000001等一系列二進制日志文件(該知識點超出本章范圍) mysql-bin.index二進制日志索引文件(該知識點超出本章范圍) mysqld.exe進程ID號PID文件f文件:server_uuid:服務(wù)器身份ID。在第一次啟動 MySQL時,會自動生成 一個server_uuid并寫入到數(shù)據(jù)庫根目錄下f文件里,官方不建議修改。嚀1 J.JM13 31滄PL'fflc feJWLC HalW1TTWJEMbXnODD6)將個人信息插入到stude nt表中,并查詢stude nt表的所有記錄。create database stude nt;use stude nt;crea

24、te table stude nt(n ame char(10) not n ull,sex char(3) not nu II,ID char(18) primary key);insert into student values('張三','男','410*001'); select * from stude nt;7)在上一步驟的查詢結(jié)果中是否出現(xiàn)了亂碼?如果出現(xiàn)了亂碼,如何避免亂碼問題的 發(fā)生?如果沒有出現(xiàn)亂碼,經(jīng)過哪些設(shè)置可以產(chǎn)生亂碼?如果出現(xiàn)了亂碼,重新刪除數(shù)據(jù)庫,重新設(shè)置字符集,再創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表(要求在同一個MySQL會話中依

25、次執(zhí)行下列代碼):drop database if exists stude nt;set character_set_clie nt = gbk;set character_set_c onnection = gbk;set character_set_database = gbk;set character_set_results = gbk;set character_set_server = gbk;create database stude nt;use stude nt;create table stude nt(n ame char(10) not n ull,sex char(

26、3) not nu II,ID char(18) primary key);insert into student values('張三','男','410*001');select * from stude nt;如果沒有出現(xiàn)亂碼,經(jīng)過哪些設(shè)置可以產(chǎn)生亂碼:set n ames lati n1;select * from stude nt;8)您的個人信息存放到了哪個文件中?情形一:如果student表是MylSAM存儲引擎的表,則則張三的數(shù)據(jù)存放在一個文 件名為stud net后綴名為MYD (即MYData的簡寫)的數(shù)據(jù)文件。情形二:如果s

27、tudent表是InnoDB存儲引擎的共享表空間的表,則張三的數(shù)據(jù)存 放在InnoDB共享表空間文件ibdatal數(shù)據(jù)文件。情形三:如果student表是InnoDB存儲引擎的獨享表空間的表,則張三的數(shù)據(jù)存 放在"student.ibd”的數(shù)據(jù)文件。9) 如何修改student表的存儲引擎?修改student表的存儲引擎后,您的個人信息存放 到了哪個文件中?答案:參考上一題。10)刪除student表以及student數(shù)據(jù)庫。use stude nt; drop table stude nt; drop database stude nt;16您所熟知的系統(tǒng)變量有哪些?如何設(shè)置系統(tǒng)變

28、量的值? 答:請參看2.5.2章節(jié)內(nèi)容。請參看 2.5.3章節(jié)內(nèi)容。17 如何進行數(shù)據(jù)庫備份和恢復(fù)?備份期間,有哪些注意事項? 答:請參看2.6章節(jié)內(nèi)容。第三章答案1. MySQL數(shù)據(jù)庫類型有哪些?如何選擇合適的數(shù)據(jù)類型? 答:請參看3.1章節(jié)內(nèi)容。請參看 3.1.7章節(jié)內(nèi)容。2. 簡單總結(jié)char(n)數(shù)據(jù)類型與varchar(n)數(shù)據(jù)類型有哪些區(qū)另 答:請參看3.1.3章節(jié)內(nèi)容。3. datetime與timestamp數(shù)據(jù)類型有什么區(qū)別?答:請參看3.1.4章節(jié)內(nèi)容。4. MySQL模式與MySQL復(fù)合數(shù)據(jù)類型有什么關(guān)系? 答:請參看3.1.5章節(jié)內(nèi)容。5.創(chuàng)建SQL腳本文件choose

29、.sql,書寫SQL代碼,運行 choose.sql,創(chuàng)建choose數(shù) 據(jù)庫的5張表。set character_set_clie nt = gbk; set character_set_c onn ecti on = gbk; set character_set_database = gbk; set character_set_results = gbk; set character_set_server = gbk; create database choose;use choose; create table teacher( teacher_ no char(10) primary

30、 key, teacher_ name char(10) not n ull, teacher_c on tact char(20) not n ull )engine=lnnoDB default charset=gbk; create table classes( class_ no int auto_ in creme nt primary key, class_ name char(20) not n ull uniq ue, departme nt_n ame char(20) not null )engine=lnnoDB default charset=gbk; create t

31、able course( course_ no int auto_ in creme nt primary key, course_ name char(10) not n ull, up_limit int default 60, description text not nuII, status char(6) default '未審核', teacher_ no char(10) not n ull uniq ue,#教師姓名不允許為空#教師聯(lián)系方式名不允許為空#班級名不允許為空、且不允許重復(fù)#院系名不允許為空#課程名允許重復(fù)#課程上限設(shè)置默認(rèn)值為 60#課程的描述信息為

32、文本字符串text,且不能為空#課程狀態(tài)的默認(rèn)值為“未審核”#唯一性約束實現(xiàn)教師與課程之間1:1關(guān)系#學(xué)號不允許重復(fù)#學(xué)生姓名不允許為空#學(xué)生聯(lián)系方式不允許為空#學(xué)生的班級允許為空con stra int course_teacher_fk foreig n key(teacher_ no) references teacher(teacher_ no) )engine=lnnoDB default charset=gbk;create table stude nt(stude nt_no char(11) primary key,stude nt_n ame char(10) not n u

33、ll, stude nt_con tact char(20) not nu II, class_ no int , constraint student class fk foreign key (class no) references classes(class no) )engine=lnnoDB default charset=gbk;create table choose(choose_ no int auto_ in creme nt primary key, stude nt_no char(11) not null,#學(xué)生學(xué)號不允許為空course_no int n ot nu

34、ll,#課程號不允許為空score tinyint un sig ned,choose_time datetime not null,#選課時間可由 now()函數(shù)自動生成con stra int choose_stude nt_fk foreig n key(stude nt_no) references stude nt(stude nt_no), con stra int choose_course_fk foreig n key(course_ no) referen ces course(course_ no) )engine=lnnoDB default charset=gbk;6

35、. 分析choose數(shù)據(jù)庫的5張表的表結(jié)構(gòu),通過這 5張表,可以解決"選課系統(tǒng)”問題 域中的哪些問題?答:請參看第一章課后習(xí)題的答案。7. 您是如何理解索引的?索引越多越好嗎?答:請參看3.5章節(jié)內(nèi)容。請參看 3.5.1章節(jié)內(nèi)容。&索引關(guān)鍵字的選取原則有哪些?答:請參看3.5.2章節(jié)內(nèi)容。9您所熟知的索引種類有哪些?什么是全文索引?答:請參看3.5.4章節(jié)內(nèi)容。全文索引與全文檢索全文索引:當(dāng)查詢數(shù)據(jù)量大的字符串信息時,使用全文索引可以大幅提升字符串的檢索效 率。需要注意的是,全文索引只能創(chuàng)建在char、varchar或者text字符串類型的字段上,且全文索引不支持前綴索引。全

36、文檢索是指以全部文本信息作為檢索對象的一種信息檢索技術(shù)。摘自 全文檢索本書5.10章節(jié)中,也給出了全文檢索的定義:簡單地說,MySQL中的全文檢索使用特定的分詞技術(shù),利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相關(guān)度進行檢索。通過全文索引可以提高文本匹配的速度。10. 索引與約束有什么關(guān)系?答:請參看3.5.3章節(jié)內(nèi)容。第四章答案1. NUL與NULL有什么區(qū)別?答:請參看4.4章節(jié)內(nèi)容。2. truncate與delete有什么區(qū)別?答:請參看432章節(jié)內(nèi)容。3. 更新操作與字符集有什么關(guān)系?答:如果更新語句中包含中文簡體字符,應(yīng)該合理地設(shè)置字符集,否則,將把亂碼數(shù)據(jù)更新到數(shù)據(jù)庫表中。詳細(xì)請參看4.1

37、.2章節(jié)內(nèi)容。4. 數(shù)據(jù)庫表中自增型字段的值一定連續(xù)嗎?答:請參看4.1.3章節(jié)內(nèi)容。5. replace語句與insert語句有什么區(qū)別?答:請參看4.1.6章節(jié)內(nèi)容。6. 執(zhí)行了 delete語句后,表結(jié)構(gòu)被刪除了嗎?使用什么命令可以刪除表結(jié)構(gòu)?答: delete語句刪除的是表中的記錄,無法刪除表結(jié)構(gòu);刪除表結(jié)構(gòu)可以使用 drop table命令。7. 請讀者向"選課系統(tǒng)”choose數(shù)據(jù)庫中的選課choose表插入表4-8所示的信息,并 完成其他操作。表4-8向choose表添加的測試數(shù)據(jù)choose _nostudent_nocourse _noscorechoose _ti

38、me12012001240服務(wù)器當(dāng)前時間22012001150服務(wù)器當(dāng)前時間32012002360服務(wù)器當(dāng)前時間42012002270服務(wù)器當(dāng)前時間52012003180服務(wù)器當(dāng)前時間62012004290服務(wù)器當(dāng)前時間720120053NULL服務(wù)器當(dāng)前時間820120051NULL服務(wù)器當(dāng)前時間(1)學(xué)生張三(student_no=2012001 )已經(jīng)選修了課程 java程序設(shè)計(course_no=1), 在選修時間截止前,他想把該課程調(diào)換成MySQL數(shù)據(jù)庫(course_no=2),試用SQL語句實現(xiàn)該功能。說明:題目中的張三(stude nt_n o=2012005)應(yīng)該修改為張三

39、(stude nt_no=2012001 ) 第一種方法:use choose;update choose set course no=2 where course no=1 and stude nt no='2012001:第二種方法:use choose;delete from choose where course_ no=1 and stude nt_no='2012001: insert into choose values( null,'2012005',2, null, no w();(2)學(xué)生田七(student_no=5)已經(jīng)選修了課程 c語言

40、程序設(shè)計(course_no=3),由于某種原因,在選修時間截止前,他不想選修該課程了,試用SQL語句實現(xiàn)該功能。說明:題目中的田七(stude nt_no=5)應(yīng)該修改為田七(stude nt_no=2012005)use choose;delete from choose where course no=3 and stude nt no='2012005:(3)課程結(jié)束后,請錄入某個學(xué)生的最終成績,最終成績=(原成績*70%)+30。說明:題目修改為:課程結(jié)束后,請修改所有學(xué)生的最終成績,最終成績=(原成績*70%)+30use choose;update choose set

41、score=score*0.7+30;(4)請解釋學(xué)生的成績?yōu)?NULL值的含義,NULL值等于零嗎?答:成績?yōu)镹ULL值,表示學(xué)生還沒有考試該課程,成績未知。成績?yōu)榱?,表示學(xué)生 已經(jīng)考試了該課程,成績已知。第五章答案1 .簡述limit以及distinet的用法。答:請參看5.1.2章節(jié)內(nèi)容。2. 什么是內(nèi)連接、外連接?MySQL支持哪些外連接?答:請參看5.1.3章節(jié)內(nèi)容。3. NULL參與算術(shù)運算、比較運算以及邏輯運算時,結(jié)果是什么?答:請參看5.2.2章節(jié)內(nèi)容。4. NULL參與排序時, MySQL對NULL如何處理?答:請參看5.3章節(jié)內(nèi)容。5. 您怎樣理解select語句與字符集之

42、間的關(guān)系?答:請參看5.2.3章節(jié)內(nèi)容。6. MySQL常用的聚合函數(shù)有哪些?這些聚合函數(shù)對NULL值操作的結(jié)果是什么? 答:請參看5.4章節(jié)內(nèi)容。7. 您怎樣理解 having子句與where子句之間的區(qū)別?答:請參看5.5.2章節(jié)內(nèi)容。&您怎樣理解 concat()與group_concat()函數(shù)之間的區(qū)別?答:請參看5.5.3章節(jié)內(nèi)容。9. 什么是相關(guān)子查詢與非相關(guān)子查詢?答:如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,不依靠主查詢,能夠獨立運行的子查詢,這種查詢是非相關(guān)子查詢。 非相關(guān)子查詢是獨立于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)行完畢后將值傳遞給主查詢。如果子查詢中使用

43、了主查詢的數(shù)據(jù)源,這種查詢是相關(guān)子查詢,此時主查詢的執(zhí)行與相關(guān)子查詢的執(zhí)行相互依賴。10. 請編寫SQL腳本,輸入選課系統(tǒng)綜合查詢章節(jié)內(nèi)的select語句。答:請參看5.8章節(jié)內(nèi)容。11. MySQL如何使用like關(guān)鍵字實現(xiàn)模糊查詢?有什么注意事項?答:請參看5.2.5章節(jié)內(nèi)容。12. MySQL如何使用正則表達(dá)式實現(xiàn)模糊查詢?答:請參看5.9章節(jié)內(nèi)容。13. MySQL如何進行全文檢索?全文檢索有什么注意事項?答:請參看5.10章節(jié)內(nèi)容。14. 您覺得全文檢索與like模糊查詢、正則表達(dá)式模糊查詢最大的區(qū)別是什么?答:全文檢索:是指全文檢索解析器 (分詞技術(shù))通過掃描文章中的每一個詞, 對

44、每一個詞 建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶進行aga in st查詢時,根據(jù)事先建立的全文索引進行查找,并將查找的結(jié)果反饋給用戶。以全文檢索“我們is中國人而自豪”為例。全文檢索解析器可將該中文信息切分成:我們、is、中國、國人、人而、而自、自豪(這里以兩個字為單位進行分割為例,實際情況更為復(fù)雜),并建立全文索引。當(dāng)用戶使用contains語句查詢“自豪”(為了區(qū)分,搜索關(guān)鍵詞是藍(lán)色字)關(guān)鍵詞時, 此時“自豪”(藍(lán)色字)去匹配全文索引中的“ 自豪”(為了區(qū)分,索引關(guān)鍵詞是紅色字), 并將匹配到的結(jié)果“我們 is中國人而自豪”返回!而使用like或者正則表達(dá)式查詢“自豪”關(guān)

45、鍵詞時,并沒有將“我們 is中國人而自豪” 這句話分割,還是將整句話當(dāng)作整體來看,然后通過字符串比較的方式,判斷“自豪”字符串是不是“我們is中國人而自豪”字符串的子字符串。如果是,說明成功匹配,然后將匹 配到的結(jié)果“我們is中國人而自豪”返回!因此:全文檢索的核心是利用分詞技術(shù)建立索引,繼而利用索引加快字符串的匹配速度。like或者正則表達(dá)式的核心是搜索關(guān)鍵詞“自豪”字符串是不是“我們is中國人而自豪”字符串的子字符串。15. 最新版本的 MySQL中,InnoDB存儲引擎的表支持全文檢索嗎? 答:支持16. MySQL不支持完全連接,您能不能通過其他技術(shù)手段實現(xiàn)完全連接的功能?答:將左連接

46、和右連接通過union模擬實現(xiàn)完全連接。17 .合并結(jié)果集時,union與union all有什么區(qū)別?答:請參看5.6章節(jié)內(nèi)容。18.給定一個教師的工號(例如'001'),統(tǒng)計該教師已經(jīng)申報了哪些課程。答:selectcourseno ,course_ name,up_limit,descriptio n,teacher.teacher_ no,teacher_ name,teacher_con tact,av ailable,statusfrom course join teacher on course.teacher_ no=teacher.teacher_ nowhe

47、re teacher.teacher no = '001:第六章答案1使用 select 語句輸出各種數(shù)據(jù)類型的常量時,數(shù)據(jù)類型都是如何轉(zhuǎn)換的? 答:各種數(shù)據(jù)類型的常量會被 自動轉(zhuǎn)換為“字符串”再進行顯示。 2系統(tǒng)會話變量與用戶會話變量有什么區(qū)別與聯(lián)系? 答:請參看 6.1.2 章節(jié)內(nèi)容。3用戶會話變量與局部變量有什么區(qū)別與聯(lián)系? 答:請參看 6.1.2 章節(jié)內(nèi)容。4為用戶會話變量或者局部變量賦值時,有哪些注意事項? 答:請參看 6.1.2 章節(jié)內(nèi)容。5編寫 MySQL 存儲程序時,為什么需要重置命令結(jié)束標(biāo)記? 答:請參看 6.1.5 章節(jié)內(nèi)容。6創(chuàng)建本書涉及到的所有自定義函數(shù),并進行

48、調(diào)用。 答:請參看本章內(nèi)容。7總結(jié)哪些日期、時間函數(shù)的執(zhí)行結(jié)果與時區(qū)的設(shè)置無關(guān)。 答:請參看 6.3.6 章節(jié)內(nèi)容。8創(chuàng)建自定義函數(shù)有哪些注意事項?(1) 自定義函數(shù)的函數(shù)體使用 select 語句時,該 select 語句不能產(chǎn)生結(jié)果集,否則 將產(chǎn)生編譯錯誤。(2) 自定義函數(shù)是數(shù)據(jù)庫的對象, 因此, 創(chuàng)建自定義函數(shù)時, 需要指定該自定義函 數(shù)隸屬于哪個數(shù)據(jù)庫。(3) 同一個數(shù)據(jù)庫內(nèi), 自定義函數(shù)名不能與已有的函數(shù)名 (包括系統(tǒng)函數(shù)名) 重名。 建議在自定義函數(shù)名中統(tǒng)一添加前綴“fn_ ”或者后綴“ _fn”。(4) 函數(shù)的參數(shù)無需使用 declare 命令定義,但它仍然是局部變量,且必須提

49、供參 數(shù)的數(shù)據(jù)類型。自定義函數(shù)如果沒有參數(shù),則使用空參數(shù)“ () ”即可。(5) 函數(shù)創(chuàng)建成功后,記得將命令結(jié)束標(biāo)記恢復(fù)“原狀”。(6) 函數(shù)必須指定返回值數(shù)據(jù)類型, 且須與 return 語句中的返回值的數(shù)據(jù)類型相近 長度可以不同)。9 請分析下面的getdate()函數(shù)完成的功能,創(chuàng)建該函數(shù),并調(diào)用該函數(shù)。us:e choose ;Datable changed nysql> deLimitei' $crfeAte Function tdate<gdate datetime3 i*eturns uarcli*i*<255>、no s:q_> be

50、63;n-> declare x VArchai'SSS? default J * >-> set x= dAte_foi*nAt<adate年初月曲 日曲時M分島秒;I'eturn X;-> end-> $Qu&py OK, & raus affected C0.07 sec>d&linitep ;nys(ll> sel&ct getdateCnowO;+! getdatzeCitowC?>:4 <I加飾年型月02 311時45分4秒I” 1 ib« xrt set C0-1

51、3 sec函數(shù)的功能:對日期時間進行格式化。10.通過本章知識的講解, 您是如何理解中文全文檢索的?您覺得實現(xiàn)中文全文檢索的 核心技術(shù)是什么?答:請參考第五章課后習(xí)題答案。第七章答案1 視圖與基表有什么區(qū)別和聯(lián)系?視圖與select語句有什么關(guān)系?答:視圖與基表有什么區(qū)別和聯(lián)系:數(shù)據(jù)庫表稱為基本表或者基表,視圖稱為虛表。基表的數(shù)據(jù)發(fā)生變化時,虛表的數(shù)據(jù)也會隨之變化。觸發(fā)器基于表(嚴(yán)格地說是基于表的記錄),這里的表是基表,不是臨時表(temporary類型的表),也不是視圖。通過視圖雖然可以更新基表的數(shù)據(jù),但本書并不建議這樣做。原因在于,通過視圖更新基表數(shù)據(jù),并不會觸發(fā)觸發(fā)器的運行。視圖與sel

52、ect語句有什么關(guān)系:視圖中保存的就是一條select語句。對于經(jīng)常使用的結(jié)構(gòu)復(fù)雜的select語句,建議將其封裝為視圖。2. 什么是檢查視圖?什么是 local檢查視圖與cascaded檢查視圖?答:創(chuàng)建視圖時,沒有使用with check option子句時,即 with _check_option的值為0,表示視圖為普通視圖;使用with check option 子句或者 with cascaded check option子句時,表示該視圖為 cascaded檢查視圖;使用 with local check option 子句,表示該視圖為local檢查視圖。檢查視圖:通過檢查視圖更

53、新基表數(shù)據(jù)時, 檢查視圖對更新語句進行了先行檢查,只有滿足檢查條件的更新語句才能成功執(zhí)行。如果更新語句不滿足檢查視圖定義的檢查條件,則檢查視圖拋出異常,更新失敗。local檢查視圖與cascaded檢查視圖的區(qū)別聯(lián)系,請參看7.1.7章節(jié)內(nèi)容3. 請用觸發(fā)器實現(xiàn)檢查約束:一個學(xué)生某門課程的成績score要求在0到100之間取 值。答:本題需要為 choose表創(chuàng)建了一個 before、insert觸發(fā)器和一個 before、update觸發(fā) 器。由于本章7.2.3章節(jié)中,已經(jīng)為choose表創(chuàng)建了一個before> insert觸發(fā)器和一個before> update觸發(fā)器。而同一

54、個表不能創(chuàng)建兩個相同觸發(fā)時間、觸發(fā)事件的觸發(fā)程序。因此,為了實現(xiàn)本題功能,需要首先刪除7.2.3章節(jié)中的兩個觸發(fā)器。drop trigger choose_ in sert_before_trigger;drop trigger choose delete before trigger;然后再為choose表創(chuàng)建一個after、insert觸發(fā)器和一個after、update觸發(fā)器,自動維護 課程available的字段值。delimiter $create trigger choose_ in sert_after_trigger after insert on choose for eac

55、h row beginupdate course set available=available-1 where course_ no=n ew.course_ no; en d;$delimiter ;delimiter $create trigger choose_delete_after_trigger after delete on choose for each row beginupdate course set available=available+1 where course_ no=old.course_ no; en d;$delimiter ;最后,再為choose表創(chuàng)

56、建一個before> insert觸發(fā)器和一個before> update觸發(fā)器實現(xiàn) 檢查約束:一個學(xué)生某門課程的成績score要求在0到100之間取值。delimiter $create trigger choose_ in sert_before_trigger before insert on choose for each row beginif(n ew.score>=0 && n ew.score<=100) the nset n ew.score = n ew.score;else in sert into mytable values(0);end if;en d;$delimiter ;delimiter $create trigger choose_update_before_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論