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

下載本文檔

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

文檔簡介

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

2、含表、索引、視圖、存儲過程、觸發(fā)器、函數(shù)等數(shù)據(jù)庫對象。3 通過本章知識的講解,SQL與程序設計語言有什么關系?SQL并不是一種功能完善的程序設計語言,例如,不能使用SQL構(gòu)建人性化的圖形用戶界面Graphical User Interface,GUI,程序員需要借助Java、VC+等面向?qū)ο蟪绦蛟O計語言或者HTML的FORMeb應用程序,處理FORM表單中的數(shù)據(jù)以及數(shù)據(jù)庫中的數(shù)據(jù)。其他答案:1、首先SQL語言是數(shù)據(jù)庫結(jié)構(gòu)化查詢語言,是非過程化編程語言。而程序設計語言則有更多的面向?qū)ο蠹斑壿嫵绦蛟O計。比方用SQL語言編寫圖形用戶界面例如窗口、進度條,是無法實現(xiàn)的。2、SQL語言可以說是,程序設計

3、語言和數(shù)據(jù)庫之間的一個翻譯官。程序設計語言需要操作數(shù)據(jù)庫時,需要借助或者說調(diào)用SQL語言來翻譯給數(shù)據(jù)庫管理系統(tǒng)。3、不同數(shù)據(jù)庫管理系統(tǒng)會有一些特殊的SQL標準,比方 limit關鍵詞在SQL Server中無法使用。而這些標準與程序設計語言無關。4 通過本章的學習,您了解的MySQL有哪些特點?與題目2中列舉的商業(yè)化數(shù)據(jù)庫管理系統(tǒng)相比,MySQL具有開源、免費、體積小、便于安裝,但功能強大等特點。5 通過本章的學習,您覺得數(shù)據(jù)庫表與電子表格例如Excel有哪些區(qū)別?限于本章的知識點:外觀上,關系數(shù)據(jù)庫中的一個數(shù)據(jù)庫表和一個不存在“合并單元格”的電子表格例如Excel相同。與電子表格不同的是:同

4、一個數(shù)據(jù)庫表的字段名不能重復。為了優(yōu)化存儲空間以及便于數(shù)據(jù)排序,數(shù)據(jù)庫表的每一列必須指定某種數(shù)據(jù)類型。關系數(shù)據(jù)庫中的表是由列和行構(gòu)成的,和電子表格不同的是,數(shù)據(jù)庫表要求表中的每一行記錄都必須是唯一的,即在同一張數(shù)據(jù)庫表中不允許出現(xiàn)完全相同的兩條記錄。6 您所熟知的數(shù)據(jù)庫設計輔助工具有哪些?您所熟知的模型、工具、技術有哪些?數(shù)據(jù)庫設計輔助工有數(shù)據(jù)模型、數(shù)據(jù)建模工具、關系數(shù)據(jù)庫設計技術。其中常用的數(shù)據(jù)模型有ER模型和類圖;常用的數(shù)據(jù)建模工具如ERwin、PowerDesigner、Visio等;常用的關系數(shù)據(jù)庫設計技術如數(shù)據(jù)庫標準化技術。1模型數(shù)據(jù)模型有E-R圖或者類圖等數(shù)據(jù)模型。業(yè)務模型有程序流

5、程圖、數(shù)據(jù)流程圖DFD、時序圖、狀態(tài)圖等業(yè)務模型。2工具軟件項目管理工具如美國微軟公司的Project,數(shù)據(jù)建模工具如ERwin、PowerDesigner、Visio,業(yè)務建模工具如PowerDesigner、Rational Rose以及Visio等。IDE工具有、Visual Studio、Eclipse以及NetBeans等。測試工具有Junit單元測試工具、QuickTest Professional功能測試工具以及LoadRunner性能測試工具等。3技術軟件開發(fā)時常用的技術包括:面向?qū)ο蠓治龊驮O計技術、結(jié)構(gòu)化分析和設計技術、軟件測試技術和關系數(shù)據(jù)庫設計技術等。7 請您羅列出“選課

6、系統(tǒng)”需要實現(xiàn)哪些功能,使用數(shù)據(jù)庫技術能夠解決“選課系統(tǒng)”中的哪些商業(yè)問題?“選課系統(tǒng)”中存在的商業(yè)問題等于“選課系統(tǒng)”需要實現(xiàn)的功能:如何存儲以及維護課程、學生、教師以及班級的詳細信息?不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)分課程?如何控制每位教師只能申報一門選修課程?如何控制每門課程的人數(shù)上限在60、150、230中取值?如何控制每一門課程的選課學生總?cè)藬?shù)不超過該課程的人數(shù)上限?如何實現(xiàn)學生選課功能、退選功能以及調(diào)課功能?如何控制每位學生最多可以選修兩門課程,且兩門課程不能相同?系統(tǒng)如何自動記錄學生的選課時間?如何統(tǒng)計每一門課程還可以供多少學生選修?如何統(tǒng)計人數(shù)已經(jīng)報滿的

7、課程?如何統(tǒng)計某一個教師已經(jīng)申報了哪些課程?如何統(tǒng)計某一個學生已經(jīng)選修了多少門課程,是哪些課程?如何統(tǒng)計選修人數(shù)少于30人的所有課程信息?如何統(tǒng)計選修每一門課程的所有學生信息?課程信息刪除后,如何保證選擇該課程的學生可以選修其他課程?如何通過搜索關鍵字檢索自己感興趣的課程信息?8 您所熟知的編碼標準有哪些?1 命名標準2 注釋3 書寫標準縮進標準9 您是如何理解“E-R圖中實體間的關系是雙向的”?能不能舉個例子?請參看1.3.1章節(jié)的內(nèi)容。10 E-R圖中,什么是基數(shù)?什么是元?什么是關聯(lián)?請參看1.3.2章節(jié)的內(nèi)容。11 E-R圖的設計原則是什么?您是怎么理解E-R圖的設計原則的?請參看數(shù)據(jù)

8、庫開發(fā)人員通常采用“一事一地”的原則的內(nèi)容。12關系數(shù)據(jù)庫的設計步驟是什么?為每張表定義一個主鍵有技巧可循嗎?主鍵與關鍵字有什么關系?關系數(shù)據(jù)庫的設計步驟,請參看1.4章節(jié)的內(nèi)容。為每張表定義一個主鍵技巧,請參看1.4.2章節(jié)的內(nèi)容。主鍵與關鍵字有什么關系,請參看1.4.2章節(jié)的內(nèi)容。12 在關系數(shù)據(jù)庫設計過程中,如何表示E-R圖中的1:1、1:m、m:n關系?請參看1.4.3以及1.4.4章節(jié)的內(nèi)容。13 在數(shù)據(jù)庫管理系統(tǒng)中,您所熟知的數(shù)據(jù)類型有哪些?每一種數(shù)據(jù)類型能不能各列舉一些例子?請參看1.4.5章節(jié)的內(nèi)容。14 您所熟知的約束條件有哪些?MySQL支持哪些約束條件?請參看1.4.6章

9、節(jié)的內(nèi)容。MySQL支持主鍵primary key約束、外鍵foreign key約束、唯一性約束、默認值default約束、非空約束。15 數(shù)據(jù)庫中數(shù)據(jù)冗余的“并發(fā)癥”有哪些,能不能列舉一些例子?數(shù)據(jù)冗余“并發(fā)癥”插入有異常、刪除異常、修改復雜。例子參看1.4.8章節(jié)的內(nèi)容。16 如何防止數(shù)據(jù)冗余?什么是1NF、2NF、3NF?使用標準化減少數(shù)據(jù)冗余請參看1.4.8章節(jié)的內(nèi)容。17 根據(jù)本章的場景描述“很多團購網(wǎng)站在網(wǎng)上對房源進行出租”的E-R圖,請設計該場景描述的數(shù)據(jù)庫表。團購網(wǎng)站(網(wǎng)站ID,網(wǎng)址)房源房間號,房型顧客顧客號出租出租ID,網(wǎng)站ID,房間號,顧客號19如果將學生student

10、表設計為如下表結(jié)構(gòu):(student_no,student_no,student_name,student_contact,class_no,department_name)請用數(shù)據(jù)庫標準化的知識解釋該表是否滿足3NF范式的要求?該表是否存在數(shù)據(jù)冗余?是否會產(chǎn)生諸如插入異常、刪除異常、修改復雜等數(shù)據(jù)冗余“并發(fā)癥”?此題題目中的學生student表存在問題。建議將學生student表修改為如下結(jié)構(gòu)。學號性別課程號課程名成績課程號課程名成績居住地 請參看1.4.8章節(jié)的內(nèi)容。20 在“選課系統(tǒng)”中,學生選課時,由于每一門課程受到教室座位數(shù)的限制,每一門課程設置了人數(shù)上限,如何確保每一門課程選報學生

11、的人數(shù)不超過人數(shù)上限?有幾種設計方案?這些設計方案的區(qū)別在哪里?請參看1.4.9章節(jié)的內(nèi)容。21 “選課系統(tǒng)”有幾張表,每個表有哪些字段?teacher(teacher_no,teacher_name ,teacher_contact)classes(class_no,class_name,department_name)course(course_no ,course_name, up_limit,description,status,teacher_no)student(student_no,student_name,student_contact,class_no)choose(choo

12、se_no,student_no char(11),course_no,score,choose_time)22依據(jù)自己所掌握的知識,描述如何使用數(shù)據(jù)庫技術解決“選課系統(tǒng)”問題域中的問題。如何存儲以及維護課程、學生、教師以及班級的詳細信息?答:course、student、teacher、classes表可以用于存儲以及維護課程、學生、教師以及班級的詳細信息。不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)分課程?答:如果需求要求:不同教師申報的課程名不能相同,則可以通過將course表的course_name字段設置為unique約束即可。如果需求要求:不同教師申報的課程名可以相同,

13、此時可以通過給course表添加course_id無任何邏輯意義主鍵字段,標記不同教師申報的課程。如何控制每位教師只能申報一門選修課程?請參看章節(jié)的“情形二”內(nèi)容。如何控制每門課程的人數(shù)上限在60、150、230中取值?答:MySQL目前不正常check約束。但該問題可以借助MySQL觸發(fā)器解決,該題超出本章知識點內(nèi)容,請參看觸發(fā)器章節(jié)內(nèi)容。如何控制每一門課程的選課學生總?cè)藬?shù)不超過該課程的人數(shù)上限?請參看1.4.9章節(jié)的內(nèi)容。如何實現(xiàn)學生選課功能、退選功能以及調(diào)課功能?答:該問題可以借助MySQL存儲過程、事務解決,該題超出本章知識點內(nèi)容,請參看存儲過程章節(jié)以及事務章節(jié)的內(nèi)容。如何控制每位學生

14、最多可以選修兩門課程,且兩門課程不能相同?答:該問題可以借助MySQL存儲過程解決,該題超出本章知識點內(nèi)容,請參看存儲過程章節(jié)內(nèi)容。系統(tǒng)如何自動記錄學生的選課時間?答:借助MySQL的now()函數(shù)。如何統(tǒng)計每一門課程還可以供多少學生選修?如何統(tǒng)計人數(shù)已經(jīng)報滿的課程?如何統(tǒng)計某一個教師已經(jīng)申報了哪些課程?如何統(tǒng)計某一個學生已經(jīng)選修了多少門課程,是哪些課程?如何統(tǒng)計選修人數(shù)少于30人的所有課程信息?如何統(tǒng)計選修每一門課程的所有學生信息?答:上述統(tǒng)計信息超出本章知識點內(nèi)容,請參看表記錄的檢索章節(jié)內(nèi)容。課程信息刪除后,如何保證選擇該課程的學生可以選修其他課程?答:可以通過外鍵約束級聯(lián)刪除實現(xiàn),也可以

15、通過觸發(fā)器實現(xiàn)。如何通過搜索關鍵字檢索自己感興趣的課程信息?答:通過全文檢索或者模糊查詢like關鍵字實現(xiàn)。第二章答案1 通過本章的學習,您了解的MySQL有哪些特點?答:請參看2.1.1章節(jié)內(nèi)容。2請您簡單描述MySQL的使用流程。什么是MySQL客戶機?登錄主機與MySQL客戶機有什么關系?什么是MySQL會話?答:請參看2.1.1章節(jié)內(nèi)容。MySQL客戶機:與MySQL服務器通話的客戶端不止一種,比方Windows操作系統(tǒng)下的命令行,可以直接通過命令建立與mysql數(shù)據(jù)庫的通話,另外還有phpmyadmin、MySQL 等圖形化界面連接方式等。本書經(jīng)常使用的MySQL客戶機程序存放在C:

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

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

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

19、,用于保存您的個人信息如、性別、身份證號、出生日期等,并完成以下操作或問題。1上述的student表有沒有出現(xiàn)數(shù)據(jù)冗余現(xiàn)象?提示:出生日期可以由身份證號推算得出答:出生日期可由身份證號計算得出,所以上述的student表存在數(shù)據(jù)冗余現(xiàn)象。2student數(shù)據(jù)庫目錄存放在數(shù)據(jù)庫根目錄中,默認情況下,根目錄是什么?答:使用命令“show variables like 'datadir'”可以查看參數(shù)datadir的值。默認安裝MySQL后,數(shù)據(jù)庫根目錄datadir的值為“”。3如何查看student數(shù)據(jù)庫的結(jié)構(gòu)。答:請參看2.3.3章節(jié)內(nèi)容。4如何查看student表的結(jié)構(gòu),并查

20、看該表的默認字符集、字符序、存儲引擎等信息。答:請參看2.4.4章節(jié)內(nèi)容。5student數(shù)據(jù)庫目錄中存放了哪些文件?數(shù)據(jù)庫根目錄中存放了哪些文件?答:請參看2.4.1章節(jié)內(nèi)容。student數(shù)據(jù)庫目錄中存放了如下文件:(1) 數(shù)據(jù)庫文件如db.opt(2) 表名、后綴名為frm的表結(jié)構(gòu)定義文件(3) 如果student數(shù)據(jù)庫中存在InnoDB存儲引擎的獨享表空間的表,則student數(shù)據(jù)庫目錄中還會存放一個名為“”的數(shù)據(jù)文件。(4) 如果student數(shù)據(jù)庫中存在MyISAM存儲引擎的表,則student數(shù)據(jù)庫目錄中會存在一個文件名為表名、后綴名為MYD即MYData的簡寫的數(shù)據(jù)文件以及文件

21、名為表名、后綴名為MYI即MYIndex的簡寫的索引文件。數(shù)據(jù)庫根目錄中存放如下文件以及目錄如以下圖所示:數(shù)據(jù)庫目錄例如test數(shù)據(jù)庫目錄、student數(shù)據(jù)庫目錄ib_logfile0及ib_logfile1是重做日志文件InnoDB共享表空間文件ibdata1文件mysql-bin.000001等一系列二進制日志文件該知識點超出本章范圍mysql-bin.index二進制日志索引文件該知識點超出本章范圍auto f文件:server_uuid:服務器身份ID。在第一次啟動MySQL時,會自動生成一個server_uuid并寫入到數(shù)據(jù)庫根目錄下auto f文件里,官方不建議修改。6) 將個人

22、信息插入到student表中,并查詢student表的所有記錄。create database student;use student;create table student(name char(10) not null,sex char(3) not null,ID char(18) primary key);insert into student values('張三','男','410*001');select * from student;7在上一步驟的查詢結(jié)果中是否出現(xiàn)了亂碼?如果出現(xiàn)了亂碼,如何防止亂碼問題的發(fā)生?如果沒有出現(xiàn)亂碼,

23、經(jīng)過哪些設置可以產(chǎn)生亂碼?如果出現(xiàn)了亂碼,重新刪除數(shù)據(jù)庫,重新設置字符集,再創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表要求在同一個MySQL會話中依次執(zhí)行以下代碼:drop database if exists student;set character_set_client = gbk;set character_set_connection = gbk;set character_set_database = gbk;set character_set_results = gbk;set character_set_server = gbk;create database student;use student

24、;create table student(name char(10) not null,sex char(3) not null,ID char(18) primary key);insert into student values('張三','男','410*001');select * from student;如果沒有出現(xiàn)亂碼,經(jīng)過哪些設置可以產(chǎn)生亂碼:set names latin1;select * from student;8您的個人信息存放到了哪個文件中?情形一:如果student表是MyISAM存儲引擎的表,則則張三的數(shù)據(jù)存放在

25、一個文件名為studnet、后綴名為MYD即MYData的簡寫的數(shù)據(jù)文件。情形二:如果student表是InnoDB存儲引擎的共享表空間的表,則張三的數(shù)據(jù)存放在InnoDB共享表空間文件ibdata1數(shù)據(jù)文件。情形三:如果student表是InnoDB存儲引擎的獨享表空間的表,則張三的數(shù)據(jù)存放在“student.ibd”的數(shù)據(jù)文件。9如何修改student表的存儲引擎?修改student表的存儲引擎后,您的個人信息存放到了哪個文件中?答案:參考上一題。10刪除student表以及student數(shù)據(jù)庫。use student;drop table student;drop database st

26、udent;16您所熟知的系統(tǒng)變量有哪些?如何設置系統(tǒng)變量的值?答:請參看2.5.2章節(jié)內(nèi)容。請參看2.5.3章節(jié)內(nèi)容。17如何進行數(shù)據(jù)庫備份和恢復?備份期間,有哪些注意事項?答:請參看2.6章節(jié)內(nèi)容。第三章答案1MySQL數(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)容。3datetime與timestamp數(shù)據(jù)類型有什么區(qū)別?答:請參看3.1.4章節(jié)內(nèi)容。4MySQL模式與MySQL復合數(shù)據(jù)類型有什么關系?答:請參看3.1.5章節(jié)內(nèi)容。5創(chuàng)建S

27、QL腳本文件choose.sql,書寫SQL代碼,運行choose.sql,創(chuàng)建choose數(shù)據(jù)庫的5張表。set character_set_client = gbk;set character_set_connection = 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 k

28、ey,teacher_name char(10) not null,#教師不允許為空teacher_contact char(20) not null#教師聯(lián)系方式名不允許為空)engine=InnoDB default charset=gbk;create table classes(class_no int auto_increment primary key,class_name char(20) not null unique,#班級名不允許為空、且不允許重復department_name char(20) not null#院系名不允許為空)engine=InnoDB default

29、 charset=gbk;create table course(course_no int auto_increment primary key,course_name char(10) not null, #課程名允許重復up_limit int default 60,#課程上限設置默認值為60description text not null,#課程的描述信息為文本字符串text,且不能為空status char(6) default '未審核',#課程狀態(tài)的默認值為“未審核”teacher_no char(10) not null unique,#唯一性約束實現(xiàn)教師與課

30、程之間1:1關系constraint course_teacher_fk foreign key(teacher_no) references teacher(teacher_no)engine=InnoDB default charset=gbk;create table student(student_no char(11) primary key,#學號不允許重復student_name char(10) not null,#學生不允許為空student_contact char(20) not null,#學生聯(lián)系方式不允許為空class_no int ,#學生的班級允許為空const

31、raint student_class_fk foreign key (class_no) references classes(class_no)engine=InnoDB default charset=gbk;create table choose(choose_no int auto_increment primary key,student_no char(11) not null,#學生學號不允許為空course_no int not null, #課程號不允許為空score tinyint unsigned,choose_time datetime not null,#選課時間可

32、由now()函數(shù)自動生成constraint choose_student_fk foreign key(student_no) references student(student_no),constraint choose_course_fk foreign key(course_no) references course(course_no)engine=InnoDB default charset=gbk;6分析choose數(shù)據(jù)庫的5張表的表結(jié)構(gòu),通過這5張表,可以解決“選課系統(tǒng)”問題域中的哪些問題?答:請參看第一章課后習題的答案。7您是如何理解索引的?索引越多越好嗎?答:請參看3.5

33、章節(jié)內(nèi)容。請參看3.5.1章節(jié)內(nèi)容。8索引關鍵字的選取原則有哪些?答:請參看3.5.2章節(jié)內(nèi)容。9您所熟知的索引種類有哪些?什么是全文索引?答:請參看3.5.4章節(jié)內(nèi)容。全文索引與全文檢索全文索引:當查詢數(shù)據(jù)量大的字符串信息時,使用全文索引可以大幅提升字符串的檢索效率。需要注意的是,全文索引只能創(chuàng)建在char、varchar或者text字符串類型的字段上,且全文索引不支持前綴索引。全文檢索是指以全部文本信息作為檢索對象的一種信息檢索技術。摘自 :/wiki.mbalib /wiki/全文檢索本書5.10章節(jié)中,也給出了全文檢索的定義:簡單地說,MySQL中的全文檢索使用特定的分詞技術,利用查詢

34、關鍵字和查詢字段內(nèi)容之間的相關度進行檢索。通過全文索引可以提高文本匹配的速度。10索引與約束有什么關系?答:請參看3.5.3章節(jié)內(nèi)容。第四章答案1NUL與NULL有什么區(qū)別?答:請參看4.4章節(jié)內(nèi)容。2truncate與delete有什么區(qū)別?答:請參看4.3.2章節(jié)內(nèi)容。3更新操作與字符集有什么關系?答:如果更新語句中包含中文簡體字符,應該合理地設置字符集,否則,將把亂碼數(shù)據(jù)更新到數(shù)據(jù)庫表中。詳細請參看4.1.2章節(jié)內(nèi)容。4數(shù)據(jù)庫表中自增型字段的值一定連續(xù)嗎?答:請參看4.1.3章節(jié)內(nèi)容。5replace語句與insert語句有什么區(qū)別?答:請參看4.1.6章節(jié)內(nèi)容。6執(zhí)行了delete語句

35、后,表結(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_time12012001240服務器當前時間22012001150服務器當前時間32012002360服務器當前時間42012002270服務器當前時間52012003180服務器當前時間62012004290服務器當前時間720

36、120053NULL服務器當前時間820120051NULL服務器當前時間1學生張三student_no=2012001已經(jīng)選修了課程java程序設計course_no=1,在選修時間截止前,他想把該課程調(diào)換成MySQL數(shù)據(jù)庫course_no=2,試用SQL語句實現(xiàn)該功能。說明:題目中的張三student_no=2012005應該修改為張三student_no=2012001第一種方法:use choose;update choose set course_no=2 where course_no=1 and student_no='2012001'第二種方法:use cho

37、ose;delete from choose where course_no=1 and student_no='2012001'insert into choose values(null,'2012005',2,null,now();2學生田七student_no=5已經(jīng)選修了課程c語言程序設計course_no=3,由于某種原因,在選修時間截止前,他不想選修該課程了,試用SQL語句實現(xiàn)該功能。說明:題目中的田七student_no=5應該修改為田七student_no=2012005use choose;delete from choose where c

38、ourse_no=3 and student_no='2012005'3課程結(jié)束后,請錄入某個學生的最終成績,最終成績=原成績*70%+30。說明:題目修改為:課程結(jié)束后,請修改所有學生的最終成績,最終成績=原成績*70%+30use choose;update choose set score=score*0.7+30;4請解釋學生的成績?yōu)镹ULL值的含義,NULL值等于零嗎?答:成績?yōu)镹ULL值,表示學生還沒有考試該課程,成績未知。成績?yōu)榱悖硎緦W生已經(jīng)考試了該課程,成績已知。第五章答案1簡述limit以及distinct的用法。答:請參看5.1.2章節(jié)內(nèi)容。2什么是內(nèi)連接

39、、外連接?MySQL支持哪些外連接?答:請參看5.1.3章節(jié)內(nèi)容。3NULL參與算術運算、比較運算以及邏輯運算時,結(jié)果是什么?答:請參看5.2.2章節(jié)內(nèi)容。4NULL參與排序時,MySQL對NULL如何處理?答:請參看5.3章節(jié)內(nèi)容。5您怎樣理解select語句與字符集之間的關系?答:請參看5.2.3章節(jié)內(nèi)容。6MySQL常用的聚合函數(shù)有哪些?這些聚合函數(shù)對NULL值操作的結(jié)果是什么?答:請參看5.4章節(jié)內(nèi)容。7您怎樣理解having子句與where子句之間的區(qū)別?答:請參看5.5.2章節(jié)內(nèi)容。8您怎樣理解concat()與group_concat()函數(shù)之間的區(qū)別?答:請參看5.5.3章節(jié)內(nèi)

40、容。9什么是相關子查詢與非相關子查詢?答:如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,不依靠主查詢,能夠獨立運行的子查詢,這種查詢是非相關子查詢。非相關子查詢是獨立于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)行完畢后將值傳遞給主查詢。如果子查詢中使用了主查詢的數(shù)據(jù)源,這種查詢是相關子查詢,此時主查詢的執(zhí)行與相關子查詢的執(zhí)行相互依賴。10請編寫SQL腳本,輸入選課系統(tǒng)綜合查詢章節(jié)內(nèi)的select語句。答:請參看5.8章節(jié)內(nèi)容。11MySQL如何使用like關鍵字實現(xiàn)模糊查詢?有什么注意事項?答:請參看5.2.5章節(jié)內(nèi)容。12MySQL如何使用正則表達式實現(xiàn)模糊查詢?答:請參看5.9章節(jié)內(nèi)容。13MyS

41、QL如何進行全文檢索?全文檢索有什么注意事項?答:請參看5.10章節(jié)內(nèi)容。14您覺得全文檢索與like模糊查詢、正則表達式模糊查詢最大的區(qū)別是什么?答:全文檢索:是指全文檢索解析器分詞技術通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當用戶進行against查詢時,根據(jù)事先建立的全文索引進行查找,并將查找的結(jié)果反饋給用戶。以全文檢索“我們is中國人而自豪”為例。全文檢索解析器可將該中文信息切分成:我們、is、中國、國人、人而、而自、自豪這里以兩個字為單位進行分割為例,實際情況更為復雜,并建立全文索引。當用戶使用contains語句查詢“自豪”為了區(qū)分,搜索

42、關鍵詞是藍色字關鍵詞時,此時“自豪”藍色字去匹配全文索引中的“自豪”為了區(qū)分,索引關鍵詞是紅色字,并將匹配到的結(jié)果“我們is中國人而自豪”返回!而使用like或者正則表達式查詢“自豪”關鍵詞時,并沒有將“我們is中國人而自豪”這句話分割,還是將整句話當作整體來看,然后通過字符串比較的方式,判斷“自豪”字符串是不是“我們is中國人而自豪”字符串的子字符串。如果是,說明成功匹配,然后將匹配到的結(jié)果“我們is中國人而自豪”返回!因此:全文檢索的核心是利用分詞技術建立索引,繼而利用索引加快字符串的匹配速度。like或者正則表達式的核心是搜索關鍵詞“自豪”字符串是不是“我們is中國人而自豪”字符串的子字

43、符串。15最新版本的MySQL中,InnoDB存儲引擎的表支持全文檢索嗎?答:支持16MySQL不支持完全連接,您能不能通過其他技術手段實現(xiàn)完全連接的功能?答:將左連接和右連接通過union模擬實現(xiàn)完全連接。17合并結(jié)果集時,union與union all有什么區(qū)別?答:請參看5.6章節(jié)內(nèi)容。18給定一個教師的工號例如'001',統(tǒng)計該教師已經(jīng)申報了哪些課程。答:select course_no,course_name,up_limit,description,teacher.teacher_no,teacher_name,teacher_contact,available,s

44、tatuswhere 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é)束標記?答:請參看6.1.5章節(jié)內(nèi)容。6創(chuàng)建本書涉及到的所有自定義函數(shù),并進行調(diào)用。答:請參

45、看本章內(nèi)容。7總結(jié)哪些日期、時間函數(shù)的執(zhí)行結(jié)果與時區(qū)的設置無關。答:請參看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命令定義,但它仍然是局部變量,且必須提供參數(shù)的數(shù)據(jù)類型。自定義函數(shù)如果沒有參數(shù),則使用空參數(shù)“()

46、”即可。(5) 函數(shù)創(chuàng)建成功后,記得將命令結(jié)束標記恢復“原狀”。(6) 函數(shù)必須指定返回值數(shù)據(jù)類型,且須與return語句中的返回值的數(shù)據(jù)類型相近長度可以不同。9請分析下面的getdate()函數(shù)完成的功能,創(chuàng)建該函數(shù),并調(diào)用該函數(shù)。函數(shù)的功能:對日期時間進行格式化。10通過本章知識的講解,您是如何理解中文全文檢索的?您覺得實現(xiàn)中文全文檢索的核心技術是什么?答:請參考第五章課后習題答案。第七章答案1視圖與基表有什么區(qū)別和聯(lián)系?視圖與select語句有什么關系?答:視圖與基表有什么區(qū)別和聯(lián)系:數(shù)據(jù)庫表稱為基本表或者基表,視圖稱為虛表?;淼臄?shù)據(jù)發(fā)生變化時,虛表的數(shù)據(jù)也會隨之變化。觸發(fā)器基于表嚴格

47、地說是基于表的記錄,這里的表是基表,不是臨時表temporary類型的表,也不是視圖。通過視圖雖然可以更新基表的數(shù)據(jù),但本書并不建議這樣做。原因在于,通過視圖更新基表數(shù)據(jù),并不會觸發(fā)觸發(fā)器的運行。視圖與select語句有什么關系:視圖中保存的就是一條select語句。對于經(jīng)常使用的結(jié)構(gòu)復雜的select語句,建議將其封裝為視圖。2什么是檢查視圖?什么是local檢查視圖與cascaded檢查視圖?答:創(chuàng)建視圖時,沒有使用with check option子句時,即with_check_option的值為0,表示視圖為普通視圖;使用with check option子句或者with cascad

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

49、、update觸發(fā)器。由于本章7.2.3章節(jié)中,已經(jīng)為choose表創(chuàng)建了一個before、insert觸發(fā)器和一個before、update觸發(fā)器。而同一個表不能創(chuàng)建兩個相同觸發(fā)時間、觸發(fā)事件的觸發(fā)程序。因此,為了實現(xiàn)此題功能,需要首先刪除7.2.3章節(jié)中的兩個觸發(fā)器。drop trigger choose_insert_before_trigger;drop trigger choose_delete_before_trigger;然后再為choose表創(chuàng)建一個after、insert觸發(fā)器和一個after、update觸發(fā)器,自動維護課程available的字段值。delimiter $

50、create trigger choose_insert_after_trigger after insert on choose for each rowbeginupdate course set available=available-1 where course_no=new.course_no;end;$delimiter ;delimiter $create trigger choose_delete_after_trigger after delete on choose for each rowbeginupdate course set available=available

51、+1 where course_no=old.course_no;end;$delimiter ;最后,再為choose表創(chuàng)建一個before、insert觸發(fā)器和一個before、update觸發(fā)器實現(xiàn)檢查約束:一個學生某門課程的成績score要求在0到100之間取值。delimiter $create trigger choose_insert_before_trigger before insert on choose for each rowbeginif(new.score>=0 && new.score<=100) thenset new.score =

52、 new.score;else insert into mytable values(0);end if;end;$delimiter ;delimiter $create trigger choose_update_before_trigger before update on choose for each rowbeginif(new.score>=0 && new.score<=100) thenset new.score = new.score;else insert into mytable values(0);end if;end;$delimiter

53、 ;4MySQL觸發(fā)器中的觸發(fā)事件有幾種?觸發(fā)器的觸發(fā)時間有幾種?答:請參看7.2.1章節(jié)內(nèi)容。5創(chuàng)建觸發(fā)器時,有哪些注意事項?答:此題修改為:使用觸發(fā)器時,有哪些注意事項?請參看7.2.7章節(jié)內(nèi)容。6使用觸發(fā)器可以實現(xiàn)哪些數(shù)據(jù)的自動維護?答:使用觸發(fā)器可以實現(xiàn)檢查約束使用觸發(fā)器可以自動維護冗余數(shù)據(jù),例如課程available的字段值。使用觸發(fā)器可以模擬外鍵級聯(lián)選項。7您是如何理解臨時表的?臨時表與基表有什么關系?答:請參看7.3.1章節(jié)內(nèi)容。請參看7.3.4章節(jié)內(nèi)容8您是如何理解視圖、子查詢、臨時表、派生表之間的關系的?答:請參看7.5章節(jié)內(nèi)容。第八章答案1編寫“選課系統(tǒng)”的存儲過程,并對其

54、進行調(diào)用、測試。答:請參看本章代碼。2查看存儲過程定義的方法有哪些?答:請參看8.1.4章節(jié)內(nèi)容。3請羅列存儲過程與函數(shù)的區(qū)別與聯(lián)系。答:請參看8.1.6章節(jié)內(nèi)容。4數(shù)據(jù)庫開發(fā)人員定義錯誤處理機制時,需要提供錯誤處理類型、錯誤觸發(fā)條件以及錯誤處理程序等信息,錯誤處理類型有哪些?什么是錯誤觸發(fā)條件以及錯誤處理程序?答:錯誤處理類型的取值要么是continue,要么是exit。當錯誤處理類型是continue時,表示錯誤發(fā)生后,MySQL立即執(zhí)行自定義錯誤處理程序,然后忽略該錯誤繼續(xù)執(zhí)行其他MySQL語句。當錯誤處理類型是exit時,表示錯誤發(fā)生后,MySQL立即執(zhí)行自定義錯誤處理程序,然后立刻停

55、止其他MySQL語句的執(zhí)行。錯誤觸發(fā)條件以及錯誤處理程序,請參看8.2.1章節(jié)內(nèi)容。5游標的使用步驟是什么?每一個步驟完成什么任務?答:請參看.1章節(jié)內(nèi)容。6舉例說明,如何遍歷游標中的“結(jié)果集”。答:請參看.2章節(jié)內(nèi)容。7使用預處理SQL語句有哪些注意事項?預處理SQL語句與靜態(tài)SQL語句有什么區(qū)別和聯(lián)系?答:注意事項請參看.1章節(jié)內(nèi)容;預處理SQL語句與靜態(tài)SQL語句有什么區(qū)別和聯(lián)系請參看.4章節(jié)內(nèi)容。第九章答案1請簡單描述事務的必要性。答:請參看.1章節(jié)內(nèi)容。2關閉MySQL自動提交的方法有哪些?您推薦數(shù)據(jù)庫開發(fā)人員使用哪一種方法?答:請參看.2章節(jié)內(nèi)容。推薦數(shù)據(jù)庫開發(fā)人員盡可能地使用MySQL命令“start transaction;”隱式地關閉自動提交,使用MySQL命令“commit;”顯示地提交更新語句。3關閉MySQL自動提交后,提交更新

溫馨提示

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

評論

0/150

提交評論