


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jì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、美國甲骨文公司的 o
2、racle。數(shù)據(jù)庫容器中通常包含表、索引、視圖、存儲過程、觸發(fā)器、函數(shù)等數(shù)據(jù)庫對象。3. 通過本章知識的講解,sql 與程序設(shè)計語言有什么關(guān)系?sql 并不是一種功能完善的程序設(shè)計語言,例如,不能使用 sql 構(gòu)建人性化的圖形用戶界面( graphical user interface, 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、
3、首先 sql 語言是數(shù)據(jù)庫結(jié)構(gòu)化查詢語言,是非過程化編程語言。而程序設(shè)計語言則有更多的面向?qū)ο蠹斑壿嫵绦蛟O(shè)計。比如用sql 語言編寫圖形用戶界面(例如窗口、進(jìn)度條),是無法實現(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 具有開源、免費
4、、體積小、便于安裝,但功能強(qiáng)大等特點。5. 通過本章的學(xué)習(xí),您覺得數(shù)據(jù)庫表與電子表格(例如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è)計輔
5、助工有數(shù)據(jù)模型、 數(shù)據(jù)建模工具、 關(guān)系數(shù)據(jù)庫設(shè)計技術(shù)。 其中常用的數(shù)據(jù)模型有 er 模型和類圖;常用的數(shù)據(jù)建模工具如 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 、vi
6、sualstudio 、 eclipse以及netbeans 等。測試工具有junit 單元測試工具、quicktest professional 功能測試工具以及l(fā)oadrunner 性能測試工具等。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)的功能): 如何存儲以及維護(hù)課程、學(xué)生、教師以及班級的詳細(xì)信息?不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)
7、分課程? 如何控制每位教師只能申報一門選修課程?如何控制每門課程的人數(shù)上限在(60、150、230)中取值? 如何控制每一門課程的選課學(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é)生可以選修其
8、他課程? 如何通過搜索關(guān)鍵字檢索自己感興趣的課程信息?8. 您所熟知的編碼規(guī)范有哪些?1. 命名規(guī)范2. 注釋3. 書寫規(guī)范(縮進(jìn)規(guī)范)9. 您是如何理解“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è)計步驟,請參看
9、1.4 章節(jié)的內(nèi)容。為每張表定義一個主鍵技巧,請參看1.4.2 章節(jié)的內(nèi)容。主鍵與關(guān)鍵字有什么關(guān)系,請參看1.4.2 章節(jié)的內(nèi)容。12. 在關(guān)系數(shù)據(jù)庫設(shè)計過程中,如何表示e-r 圖中的 1:1、1:m、m:n 關(guā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 章節(jié)的內(nèi)容。 mysql 支持主鍵( primary key )約束、外鍵( foreign key ) 約束、唯一性()約束
10、、默認(rèn)值(default )約束、非空()約束。15. 數(shù)據(jù)庫中數(shù)據(jù)冗余的“并發(fā)癥”有哪些,能不能列舉一些例子?數(shù)據(jù)冗余“并發(fā)癥”插入有異常、刪除異常、修改復(fù)雜。例子參看1.4.8 章節(jié)的內(nèi)容。16. 如何避免數(shù)據(jù)冗余?什么是1nf、2nf 、3nf ? 使用規(guī)范化減少數(shù)據(jù)冗余請參看1.4.8 章節(jié)的內(nèi)容。17. 根據(jù)本章的場景描述“很多團(tuán)購網(wǎng)站在網(wǎng)上對房源進(jìn)行出租”的e-r 圖,請設(shè)計該場景描述的數(shù)據(jù)庫表。團(tuán)購網(wǎng)站 (網(wǎng)站 id ,網(wǎng)址 )房源(房間號,房型) 顧客(顧客號)(student_no,student_no,student_name,student_contact,class_n
11、o,department_name)請用數(shù)據(jù)庫規(guī)范化的知識解釋該表是否滿足3nf范式的要求?該表是否存在數(shù)據(jù)冗余?是否會產(chǎn)生諸如插入異常、刪除異常、修改復(fù)雜等數(shù)據(jù)冗余“并發(fā)癥”?此題題目中的學(xué)生student 表存在問題。建議將學(xué)生student 表修改為如下結(jié)構(gòu)。學(xué)號姓名性別課程號課程名成績課程號課程名成績居住地郵編出租(出租 id ,網(wǎng)站 id ,房間號,顧客號) 19如果將學(xué)生student 表設(shè)計為如下表結(jié)構(gòu):請參看 1.4.8 章節(jié)的內(nèi)容。20. 在“選課系統(tǒng)”中,學(xué)生選課時,由于每一門課程受到教室座位數(shù)的限制,每一門課程設(shè)置了人數(shù)上限, 如何確保每一門課程選報學(xué)生的人數(shù)不超過人數(shù)上
12、限?有幾種設(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
13、se_no,student_no char(11),course_no,score,choose_time)22. 依據(jù)自己所掌握的知識,描述如何使用數(shù)據(jù)庫技術(shù)解決“選課系統(tǒng)”問題域中的問題。如何存儲以及維護(hù)課程、學(xué)生、教師以及班級的詳細(xì)信息?答: course、student、teacher、classes 表可以用于存儲以及維護(hù)課程、學(xué)生、教師以及班級的詳細(xì)信息。不同教師申報的課程名能否相同?如果允許課程名相同,如何區(qū)分課程?答:如果需求要求:不同教師申報的課程名不能相同,則可以通過將course 表的course_name 字段設(shè)置為 unique 約束即可。如果需求要求:不同教師申報的
14、課程名可以相同,此時可以通過給course 表添加course_id(無任何邏輯意義)主鍵字段,標(biāo)記不同教師申報的課程。如何控制每位教師只能申報一門選修課程?請參看 1.4.3 章節(jié)的“情形二”內(nèi)容。如何控制每門課程的人數(shù)上限在(60、150、230)中取值?答: mysql目前不正常check 約束。但該問題可以借助mysql 觸發(fā)器解決,該題超出本章知識點內(nèi)容,請參看觸發(fā)器章節(jié)內(nèi)容。如何控制每一門課程的選課學(xué)生總?cè)藬?shù)不超過該課程的人數(shù)上限?請參看 1.4.9 章節(jié)的內(nèi)容。如何實現(xiàn)學(xué)生選課功能、退選功能以及調(diào)課功能?答:該問題可以借助mysql 存儲過程、事務(wù)解決,該題超出本章知識點內(nèi)容,請
15、參看存儲過程章節(jié)以及事務(wù)章節(jié)的內(nèi)容。如何控制每位學(xué)生最多可以選修兩門課程,且兩門課程不能相同?答:該問題可以借助mysql 存儲過程解決,該題超出本章知識點內(nèi)容,請參看存儲過程章節(jié)內(nèi)容。系統(tǒng)如何自動記錄學(xué)生的選課時間? 答:借助 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)容。課程信息刪除后,如何保證選擇該
16、課程的學(xué)生可以選修其他課程?答:可以通過外鍵約束級聯(lián)刪除實現(xiàn),也可以通過觸發(fā)器實現(xiàn)。如何通過搜索關(guān)鍵字檢索自己感興趣的課程信息?答:通過全文檢索或者模糊查詢like 關(guān)鍵字實現(xiàn)。第二章答案 1通過本章的學(xué)習(xí),您了解的mysql 有哪些特點? 答:請參看 2.1.1 章節(jié)內(nèi)容。2. 請您簡單描述 mysql 的使用流程。 什么是 mysql 客戶機(jī)?登錄主機(jī)與mysql客戶機(jī)有什么關(guān)系?什么是mysql 會話?答:請參看 2.1.1 章節(jié)內(nèi)容。mysql 客戶機(jī):與 mysql 服務(wù)器通話的客戶端不止一種,比如windows 操作系統(tǒng)下的命令行,可以直接通過命令建立與mysql 數(shù)據(jù)庫的通話,另
17、外還有phpmyadmin 、mysql 等圖形化界面連接方式等。本書經(jīng)常使用的 mysql 客戶機(jī)程序 mysql.exe 存放在 c:programfilesmysqlmysql server 5.6bin 目錄。在一臺登錄主機(jī)上可以開啟多個 mysql 客戶機(jī)。數(shù)據(jù)庫用戶訪問 mysql 服務(wù)器的數(shù)據(jù)時,首先需要選擇一臺登錄主機(jī),然后在該登錄主機(jī)上開啟 mysql 客戶機(jī), 輸入正確的賬戶名、 密碼, 建立一條 mysql 客戶機(jī)與 mysql 服務(wù)器之間的“通信鏈路”。通信鏈路斷開之前, mysql 客戶機(jī)可以向 mysql 服務(wù)器發(fā)送多次“請求”, mysql 服務(wù)器會對每一次請求做
18、出“響應(yīng)”,請求 /響應(yīng)期間稱為 mysql 會話。3. 通過 google 或者 baidu 搜索引擎, 搜索常用的 mysql 客戶端工具 (或者客戶機(jī)程序)有哪些。答案參見知乎,網(wǎng)址: 4. mysql服務(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 客戶機(jī)連接 mysql 服務(wù)器的方法
19、有哪些?連接mysql 服務(wù)器時,需提供哪些信息?答:請參看 2.1.7 章節(jié)內(nèi)容。8. 字符、字符集、字符序分別是什么?字符序的命名規(guī)則是什么? 答:請參看 2.2.1 章節(jié)內(nèi)容。9. 您所熟知的字符集、字符序有哪些?它們之間有什么區(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
20、 腳本文件,并運行該腳本文件中的代碼。答:請參看 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 表,用于保存您的個人信息(如姓名、性別、身份證號、出生日期等),并完成下列操作或問題。1) 上述的 student 表有沒有出現(xiàn)數(shù)據(jù)冗余現(xiàn)象?(提示:出生日期可以由身份證號推算得出)答:出生日期可由身份證號計算得出,所以上述的student 表存在數(shù)據(jù)冗余現(xiàn)象。2) student 數(shù)據(jù)庫目錄存放在
21、數(shù)據(jù)庫根目錄中,默認(rèn)情況下,根目錄是什么?答:使用命令“ show variables like 'datadir' ”可以查看參數(shù) datadir 的值。默認(rèn)安裝 mysql 后 , 數(shù) 據(jù) 庫 根 目 錄 datadir 的 值 為 “ c:/documents and settings/all 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)字符集、字符序、存儲引擎等信息。答
22、:請參看 2.4.4 章節(jié)內(nèi)容。5) student 數(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ù)庫目錄中還會存放一個名為“表名 .ibd”的數(shù)據(jù)文件。(4) 如果 student 數(shù)據(jù)庫中存在 myisam 存儲引擎的表, 則 student 數(shù)據(jù)庫目錄中會存在一個文件名為表名、后綴名為 myd (即 myd
23、ata 的簡寫)的數(shù)據(jù)文件以及文件名為表名、后綴名為 myi (即 myindex 的簡寫)的索引文件。數(shù)據(jù)庫根目錄中存放如下文件以及目錄(如下圖所示):數(shù)據(jù)庫目錄(例如test 數(shù)據(jù)庫目錄、 student 數(shù)據(jù)庫目錄)ib_logfile0 及 ib _logfile1 是重做日志文件innodb 共享表空間文件 ibdata1 文件mysql-bin.000001 等一系列二進(jìn)制日志文件(該知識點超出本章范圍) mysql-bin.index 二進(jìn)制日志索引文件(該知識點超出本章范圍) mysqld.exe 進(jìn)程 id 號 pid 文件f 文件: server_uuid:服務(wù)器身份 id
24、 。在第一次啟動mysql 時,會自動生成一個 server_uuid 并寫入到數(shù)據(jù)庫根目錄下f 文件里,官方不建議修改。6) 將個人信息插入到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
25、9;); select * from student;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 會話中依次執(zhí)行下列代碼):drop database if exists student; set character_set_client = gbk;set character_set_connection = gbk; set character_set_database = gbk; set character_
26、set_results = gbk;set character_set_server = gbk;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;如果沒有出現(xiàn)亂碼,經(jīng)過哪些設(shè)置可以產(chǎn)生亂碼:set n
27、ames latin1; select * from student;8) 您的個人信息存放到了哪個文件中?情形一:如果 student 表是 myisam 存儲引擎的表,則則張三的數(shù)據(jù)存放在一個文件名為 studne、t后綴名為 myd (即 mydata 的簡寫)的數(shù)據(jù)文件。情形二:如果 student 表是 innodb存儲引擎的共享表空間的表,則張三的數(shù)據(jù)存放在 innodb 共享表空間文件ibdata1 數(shù)據(jù)文件。情形三:如果 student 表是 innodb存儲引擎的獨享表空間的表,則張三的數(shù)據(jù)存放在“ student.ibd”的數(shù)據(jù)文件。9) 如何修改student 表的存儲引
28、擎?修改student 表的存儲引擎后,您的個人信息存放到了哪個文件中?答案:參考上一題。use student;drop table student; drop database student;10) 刪除 student 表以及 student 數(shù)據(jù)庫。16. 您所熟知的系統(tǒng)變量有哪些?如何設(shè)置系統(tǒng)變量的值? 答:請參看 2.5.2 章節(jié)內(nèi)容。請參看2.5.3 章節(jié)內(nèi)容。17. 如何進(jìn)行數(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)容
29、。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.sql ,書寫 sql 代碼,運行 choose.sql ,創(chuàng)建 choose 數(shù)據(jù)庫的 5 張表。set character_set_client = gbk;set character_set_connection = gbk; se
30、t 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 key,teacher_name char(10) not null,#教師姓名不允許為空teacher_contact char(20) not null#教師聯(lián)系方式名不允許為空)engine=innodb default charset
31、=gbk; create table classes(class_no int auto_increment primary key,class_name char(20) not null unique,#班級名不允許為空、且不允許重復(fù)department_name char(20) not null#院系名不允許為空)engine=innodb default charset=gbk; create table course(course_no int auto_increment primary key,course_name char(10) not null,#課程名允許重復(fù)up_l
32、imit int default 60,#課程上限設(shè)置默認(rèn)值為60description text not null,#課程的描述信息為文本字符串text,且不能為空status char(6) default '未審核 ',#課程狀態(tài)的默認(rèn)值為“未審核”teacher_no char(10) not null unique,#唯一性約束實現(xiàn)教師與課程之間1:1 關(guān)系constraint course_teacher_fk foreign key(teacher_no) references teacher(teacher_no)engine=innodb default ch
33、arset=gbk; create table student(student_no char(11) primary key,#學(xué)號不允許重復(fù)student_name char(10) not null,#學(xué)生姓名不允許為空student_contact char(20) not null,#學(xué)生聯(lián)系方式不允許為空class_no int ,#學(xué)生的班級允許為空constraint student_class_fk foreign key (class_no) references classes(class_no)engine=innodb default charset=gbk; cre
34、ate table choose(choose_no int auto_increment primary key,student_no char(11) not null,#學(xué)生學(xué)號不允許為空course_no int not null,#課程號不允許為空score tinyint unsigned,choose_time datetime not null,#選課時間可由now() 函數(shù)自動生成constraint choose_student_fk foreign key(student_no) references student(student_no), constraint cho
35、ose_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)”問題域中的哪些問題?答:請參看第一章課后習(xí)題的答案。7. 您是如何理解索引的?索引越多越好嗎?答:請參看 3.5 章節(jié)內(nèi)容。請參看3.5.1 章節(jié)內(nèi)容。8. 索引關(guān)鍵字的選取原則有哪些? 答:請參看 3.5.2 章節(jié)內(nèi)容。9. 您所熟知的索引種類有哪些?什么是全文索引? 答:請參看 3.5.4 章節(jié)內(nèi)容。全文索引
36、與 全文檢索全文索引: 當(dāng)查詢數(shù)據(jù)量大的字符串信息時,使用全文索引可以大幅提升字符串的檢索效率。 需要注意的是,全文索引只能創(chuàng)建在char、varchar 或者 text 字符串類型的字段上,且全文索引不支持前綴索引。全文檢索 是指以全部文本信息作為檢索對象的一種信息檢索技術(shù)。摘自 全文檢索本書 5.10 章節(jié)中,也給出了全文檢索的定義:簡單地說,mysql 中的全文檢索使用特定的分詞技術(shù), 利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相關(guān)度進(jìn)行檢索。通過全文索引可以提高文本匹配的速度。10. 索引與約束有什么關(guān)系? 答:請參看 3.5.3 章節(jié)內(nèi)容。第四章答案1. nul 與 null有什么區(qū)別? 答
37、:請參看 4.4 章節(jié)內(nèi)容。2. truncate 與 delete 有什么區(qū)別? 答:請參看 4.3.2 章節(jié)內(nèi)容。 3更新操作與字符集有什么關(guān)系?答:如果更新語句中包含中文簡體字符,應(yīng)該合理地設(shè)置字符集,否則,將把亂碼數(shù)據(jù)更新到數(shù)據(jù)庫表中。詳細(xì)請參看4.1.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); 刪除表
38、結(jié)構(gòu)可以使用drop table命令。( 1)學(xué)生張三( student_no=2012001)已經(jīng)選修了課程java 程序設(shè)計( course_no=1),在選修時間截止前,他想把該課程調(diào)換成實現(xiàn)該功能。mysql 數(shù)據(jù)庫( course_no=2),試用sql 語句說明:題目中的張三(student_no=2012005 )應(yīng)該修改為張三( student_no=2012001 )第一種方法:use choose;update choose set course_no=2 where course_no=1 and student_no='2012001'第二種方法:use
39、 choose;delete from choose where course_no=1 and student_no='2012001' insert into choose values(null,'2012005',2,null,now();7. 請讀者向“選課系統(tǒng)”choose 數(shù)據(jù)庫中的選課 choose 表插入表 4-8 所示的信息,并完成其他操作。表 4-8向 choose表添加的測試數(shù)據(jù)choose _nostudent _nocourse _noscorechoose _time12012001240服務(wù)器當(dāng)前時間22012001150服務(wù)器當(dāng)
40、前時間32012002360服務(wù)器當(dāng)前時間42012002270服務(wù)器當(dāng)前時間52012003180服務(wù)器當(dāng)前時間62012004290服務(wù)器當(dāng)前時間720120053null服務(wù)器當(dāng)前時間820120051null服務(wù)器當(dāng)前時間( 2)學(xué)生田七( student_no=5)已經(jīng)選修了課程c 語言程序設(shè)計( course_no=3),由于某種原因,在選修時間截止前,他不想選修該課程了,試用sql 語句實現(xiàn)該功能。說明:題目中的田七(student_no=5)應(yīng)該修改為田七( student_no=2012005)use choose;delete from choose where cours
41、e_no=3 and student_no='2012005'( 3)課程結(jié)束后,請錄入某個學(xué)生的最終成績,最終成績=(原成績 *70% ) +30。說明:題目修改為: 課程結(jié)束后, 請修改所有學(xué)生的最終成績, 最終成績 =(原成績 *70% )+30use choose;update choose set score=score*0.7+30;( 4)請解釋學(xué)生的成績?yōu)閚ull值的含義, null值等于零嗎?答:成績?yōu)?null值,表示學(xué)生還沒有考試該課程,成績未知。成績?yōu)榱?,表示學(xué)生已經(jīng)考試了該課程,成績已知。第五章答案1. 簡述 limit 以及 distinct 的用法
42、。答:請參看 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 語句與字符集之間的關(guān)系? 答:請參看 5.2.3 章節(jié)內(nèi)容。6. mysql 常用的聚合函數(shù)有哪些?這些聚合函數(shù)對null值操作的結(jié)果是什么? 答:請參看 5.4 章節(jié)內(nèi)容。7. 您怎樣理解having 子句與 where 子句之間的區(qū)別? 答:
43、請參看 5.5.2 章節(jié)內(nèi)容。8. 您怎樣理解 concat()與 group_concat()函數(shù)之間的區(qū)別? 答:請參看 5.5.3 章節(jié)內(nèi)容。9. 什么是相關(guān)子查詢與非相關(guān)子查詢?答:如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,不依靠主查詢, 能夠獨立運行的子查詢,這種查詢是非相關(guān)子查詢。非相關(guān)子查詢是獨立于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)行完畢后將值傳遞給主查詢。如果子查詢中使用了主查詢的數(shù)據(jù)源,這種查詢是相關(guān)子查詢, 此時主查詢的執(zhí)行與相關(guān)子查詢的執(zhí)行相互依賴。10. 請編寫 sql 腳本,輸入選課系統(tǒng)綜合查詢章節(jié)內(nèi)的select 語句。答:請參看 5.8 章節(jié)內(nèi)容。11. my
44、sql 如何使用 like 關(guān)鍵字實現(xiàn)模糊查詢?有什么注意事項? 答:請參看 5.2.5 章節(jié)內(nèi)容。12. mysql 如何使用正則表達(dá)式實現(xiàn)模糊查詢? 答:請參看 5.9 章節(jié)內(nèi)容。13. mysql 如何進(jìn)行全文檢索?全文檢索有什么注意事項? 答:請參看 5.10 章節(jié)內(nèi)容。全文檢索: 是指全文檢索解析器(分詞技術(shù)) 通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶進(jìn)行先建立的全文索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶。against 查詢時,根據(jù)事以全文檢索“我們is 中國人而自豪”為例。全文檢索解析器可將該中文信息切分成:我們、 is、中國、國
45、人、人而、而自、自豪更為復(fù)雜),并建立全文索引。當(dāng)用戶使用 contains 語句查詢“ 自豪 ”(為了區(qū)分,搜索關(guān)鍵詞是藍(lán)色字)關(guān)鍵詞時,(這里以兩個字為單位進(jìn)行分割為例,實際情況此時“ 自豪 ”(藍(lán)色字)去匹配全文索引中的“自豪 ”(為了區(qū)分,索引關(guān)鍵詞是紅色字),并將匹配到的結(jié)果“我們is 中國人而自豪”返回!14. 您覺得全文檢索與like 模糊查詢、正則表達(dá)式模糊查詢最大的區(qū)別是什么? 答:而使用 like 或者正則表達(dá)式查詢“自豪 ”關(guān)鍵詞時,并沒有將“我們這句話分割,還是將整句話當(dāng)作整體來看,然后通過字符串比較的方式,判斷“is 中國人而自豪”自豪”字符串是不是“我們is 中國人
46、而自豪”字符串的子字符串。如果是,說明成功匹配,然后將匹配到的結(jié)果“我們is 中國人而自豪”返回!因此:全文檢索的核心是利用分詞技術(shù)建立索引,繼而利用索引加快字符串的匹配速度。like 或者正則表達(dá)式的核心是搜索關(guān)鍵詞字符串的子字符串。“ 自豪 ”字符串是不是 “我們 is 中國人而自豪”15. 最新版本的mysql 中, innodb 存儲引擎的表支持全文檢索嗎?答:支持16. mysql 不支持完全連接,您能不能通過其他技術(shù)手段實現(xiàn)完全連接的功能? 答:將左連接和右連接通過union 模擬實現(xiàn)完全連接。17. 合并結(jié)果集時,union 與 union all 有什么區(qū)別? 答:請參看 5.
47、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,av ailable,statusfrom course join teacher on course.teacher_no=teacher.teacher_nowhere teacher.teacher_no = '001'第六章答案1使用 select 語句輸出各種數(shù)據(jù)類型
48、的常量時,數(shù)據(jù)類型都是如何轉(zhuǎn)換的? 答:各種數(shù)據(jù)類型的常量會被自動轉(zhuǎn)換為“字符串”再進(jì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ù),并進(jìn)行調(diào)用。答:請參看本章內(nèi)容。7. 總結(jié)哪些日期、時間函數(shù)的執(zhí)行結(jié)果與時區(qū)的設(shè)置無關(guān)。答:請參看 6.3.6
49、章節(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ù)“() ”即可。(5) 函數(shù)創(chuàng)建成功后,記得將命令結(jié)束標(biāo)記恢復(fù)
50、“原狀”。(6) 函數(shù)必須指定返回值數(shù)據(jù)類型,且須與 return 語句中的返回值的數(shù)據(jù)類型相近(長度可以不同)。9. 請分析下面的 getdate()函數(shù)完成的功能,創(chuàng)建該函數(shù),并調(diào)用該函數(shù)。函數(shù)的功能:對日期時間進(jìn)行格式化。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)格地說是基于表的記錄),這里
51、的表是基表,不是臨時表( temporary類型的表),也不是視圖。通過視圖雖然可以更新基表的數(shù)據(jù),但本書并不建議這樣做。 原因在于, 通過視圖更新基表數(shù)據(jù),并不會觸發(fā)觸發(fā)器的運行。視圖與 select 語句有什么關(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子句或者 wit
52、h cascaded check option子句時, 表示該視圖為cascaded檢查視圖;使用 with local check option子句,表示該視圖為local 檢查視圖。檢查視圖: 通過檢查視圖更新基表數(shù)據(jù)時, 檢查視圖對更新語句進(jìn)行了先行檢查, 只有滿足檢查條件的更新語句才能成功執(zhí)行。 如果更新語句不滿足檢查視圖定義的檢查條件, 則檢查視圖拋出異常,更新失敗。local 檢查視圖與 cascaded檢查視圖的區(qū)別聯(lián)系,請參看 7.1.7 章節(jié)內(nèi)容3. 請用觸發(fā)器實現(xiàn)檢查約束:一個學(xué)生某門課程的成績score 要求在 0 到 100 之間取值。答:本題需要為 choose 表創(chuàng)
53、建了一個 before、insert 觸發(fā)器和一個 before、update 觸發(fā)器。由于本章 7.2.3 章節(jié)中, 已經(jīng)為 choose 表創(chuàng)建了一個 before、insert 觸發(fā)器和一個 before、update 觸發(fā)器。而同一個表不能創(chuàng)建兩個相同觸發(fā)時間、觸發(fā)事件的觸發(fā)程序。drop trigger choose_insert_before_trigger;drop trigger choose_delete_before_trigger;然后再為 choose 表創(chuàng)建一個課程 available 的字段值。after、insert 觸發(fā)器和一個after、update 觸發(fā)器,
54、自動維護(hù)delimiter $create trigger choose_insert_after_trigger after insert on choose for each row beginupdate course set available=available-1 where course_no=new.course_no;end;$ delimiter ;因此,為了實現(xiàn)本題功能,需要首先刪除7.2.3 章節(jié)中的兩個觸發(fā)器。delimiter $create trigger choose_delete_after_trigger after delete on choose for
55、 each row beginupdate course set available=available+1 where course_no=old.course_no;end;$ delimiter ;最后,再為choose 表創(chuàng)建一個檢查約束:一個學(xué)生某門課程的成績before、insert 觸發(fā)器和一個before、 update 觸發(fā)器實現(xiàn)score 要求在 0 到 100 之間取值。delimiter $create trigger choose_insert_before_trigger before insert on choose for each row beginif(new.score>=0 && new.score<=100) then set new.score = new.score;else insert into mytable values(0); end if;end;$ delimiter ;delimi
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 常州高速公路路基施工方案
- 跨界合作創(chuàng)新策略-第1篇-深度研究
- 昆明二手木材回收施工方案
- 遠(yuǎn)程監(jiān)控系統(tǒng)的安全保障措施
- 酒店早餐工作流程梳理
- 2025-2030中國交通移動支付行業(yè)市場深度分析與發(fā)展前景預(yù)測研究報告
- 2025-2030中國亞磷酸行業(yè)市場深度調(diào)研及需求趨勢與投資研究報告
- 2025-2030中國互動及自助服務(wù)亭行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030中國二甲基二硫代氨基甲酸鉀行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025屆甘肅省高三下學(xué)期3月第一次診斷考試(一模)政治試題(原卷版+解析版)
- GB/T 15822.1-2024無損檢測磁粉檢測第1部分:總則
- DB44/T 1047-2012 物業(yè)服務(wù) 清潔檢查規(guī)范
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題庫及答案
- 駱駝祥子 第一到三章讀后感
- 初三語文校本研修計劃(10篇)
- 《無機(jī)化學(xué)》課件-第五章 p區(qū)元素
- 高中化學(xué)-離子反應(yīng)教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 2024(新增)異常工況安全處置管理制度
- Unit2 Special days 單元整體教學(xué)設(shè)計(1.2) 人教版新起點(一年級起點)五年級下冊
- 內(nèi)審員培訓(xùn)班考核試題
- 五十六個民族之德昂族介紹
評論
0/150
提交評論