第一篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
南華大學(xué)
計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
實(shí)驗(yàn)報(bào)告
(2013 ~2014 學(xué)年度
第二學(xué)期)
課程名稱 實(shí)驗(yàn)名稱
數(shù)據(jù)庫(kù)原理與技術(shù)
姓名 張濤 學(xué)號(hào) 20124350230
專業(yè) 軟件工程
班級(jí) 02班
地點(diǎn)
教師 劉征海 實(shí)驗(yàn)1 認(rèn)識(shí)DBMS 一.實(shí)驗(yàn)題目
認(rèn)識(shí)DBMS 二.實(shí)驗(yàn)要求
1.利用管理工具創(chuàng)建數(shù)據(jù)庫(kù)、表和表間關(guān)系。
實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng) 基本操作,進(jìn)一步理解數(shù) 據(jù)庫(kù)、表、表間關(guān)系的概念。
注意事項(xiàng):創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表時(shí)應(yīng)認(rèn)真,如果出現(xiàn)錯(cuò)誤,應(yīng)相應(yīng)地修改結(jié)構(gòu)或刪除。三.實(shí)驗(yàn)代碼(內(nèi)容)
(1)利用SQL Server Management Studio 創(chuàng)建數(shù)據(jù)庫(kù),名稱為【學(xué)生選課
YYXXXX】。其中YY為專業(yè)代號(hào),計(jì)算機(jī)為JS,軟件工程為RJ,網(wǎng)絡(luò)為WL,數(shù)媒為
SM;XXXX為各位同學(xué)的學(xué)號(hào)中的最后四位 實(shí)驗(yàn)?zāi)康模菏煜QL Server Management Studio
(2)在【學(xué)生選課YYXXXX】中建立數(shù)據(jù)表,表的定義如下所示。
學(xué)生YYXXXX(學(xué)號(hào),姓名,性別,出生日期,院系名稱,備注);
課程YYXXXX(課程號(hào),課程名,先行課,學(xué)分); 選修YYXXXX(學(xué)號(hào),課程號(hào),分?jǐn)?shù))。
要求定義每張表的主碼,為屬性選擇合適的數(shù)據(jù)類型,決定是否允許為空,為【性別】和【學(xué)分】屬性定義默認(rèn)值。
(3)定義表之間的關(guān)系。
(4)分別為表錄入幾行數(shù)據(jù)記錄,同時(shí)練習(xí)數(shù)據(jù)的修改和刪除操作
2.利用SQL 語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)、表和表間關(guān)系 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模菏煜?chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表的SQL 語(yǔ)句。
注意事項(xiàng):輸入SQL 語(yǔ)句時(shí)應(yīng)注意,語(yǔ)句中均使用西文操作符號(hào)。
實(shí)驗(yàn)內(nèi)容
在SQL Server Management Studio 中新建查詢,實(shí)現(xiàn)以下操作。(1)用SQL 語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù),名稱為“StudentCourseYYXXXX”。其中YYXXXX 為各位同學(xué)的學(xué)號(hào)中的最后四位。
(2)用SQL 語(yǔ)句創(chuàng)建StudentCourseYYXXXX 中的3 張表,同時(shí)指定主碼、外 碼、默認(rèn)值等。
(3)直接在表數(shù)據(jù)窗口中錄入表數(shù)據(jù)記錄。
實(shí)驗(yàn) 2 交互式 SQL(1)
一、數(shù)據(jù)庫(kù)單表查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模赫莆諉伪聿樵僑ELECT、FROM、WHERE 的用法,特別要掌握比較運(yùn) 算符、邏輯運(yùn)算符的使用。注意事項(xiàng):子句WHERE<條件>表示元組篩選條件;子句HAVING<條件>表示元
組選擇條件;子句HAVING<條件>必須和GROUP BY 子句配合使用;注意輸入SQL語(yǔ)句時(shí)均應(yīng)使用西文操作符號(hào)。實(shí)驗(yàn)內(nèi)容
(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)單表查詢 實(shí)驗(yàn)步驟
(1)選擇要查詢的數(shù)據(jù)庫(kù),右擊【新建查詢】,或者選擇系統(tǒng)菜單中的【文
件】|【新建】|【使用當(dāng)前連接查詢】命令,或者單擊標(biāo)準(zhǔn)工具欄中的【新建查
詢】按鈕,即可新建一個(gè)查詢窗口。如果查詢數(shù)據(jù)庫(kù)不是StudentCourseYYXXXX,則可在可用數(shù)據(jù)庫(kù)下拉列表中進(jìn)行選擇,或用USE 語(yǔ)句調(diào)用。
(2)在查詢窗口中輸入SELECT 查詢語(yǔ)句,對(duì)StudentCourseYYXXXX 數(shù)據(jù)庫(kù) 進(jìn)行查詢操作。
① 查詢計(jì)算機(jī)系全體學(xué)生的信息
② 查詢姓“李”的學(xué)生的學(xué)號(hào)和姓名。
③ 查詢課程表中先行課為空的課程名。
④ 查詢考試成績(jī)有不及格的學(xué)生的學(xué)號(hào)。
⑤ 求選修了C1 課程或C2 課程的學(xué)生的學(xué)號(hào)及成績(jī)。
⑥ 查詢?nèi)w計(jì)算機(jī)系學(xué)生的姓名及其年齡。
⑦ 查詢計(jì)算機(jī)系在1986-1987 年之間出生的學(xué)生的姓名。
⑧ 查詢姓“李”的前兩個(gè)學(xué)生的學(xué)號(hào)和姓名。
⑨ 查詢選修了兩門(mén)以上課程的學(xué)生學(xué)號(hào)與課程數(shù)。
⑩ 查詢選修課程數(shù)大于等于2 的學(xué)生的學(xué)號(hào)、平均成績(jī)和選課門(mén)數(shù),并按平均成績(jī)降序排列。
二、數(shù)據(jù)庫(kù)多表連接查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模豪斫舛啾聿樵兊母拍?;掌握多表查詢的SELECT、FROM、WHERE、JOIN子句的用法,特別要求比較內(nèi)連接、外連接的結(jié)果。
注意事項(xiàng):內(nèi)連接、左外連接和右外連接的含義及表達(dá)方法;注意輸入SQL 語(yǔ) 句時(shí)均應(yīng)使用西文操作符號(hào)。實(shí)驗(yàn)內(nèi)容
(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)多表復(fù)雜查詢。實(shí)驗(yàn)步驟
新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫(kù),輸入如下SELECT 查詢語(yǔ)句并執(zhí)行,對(duì)數(shù)據(jù)庫(kù)進(jìn)行多表連接查詢操作。(1)查詢選修了【數(shù)據(jù)庫(kù)原理】的計(jì)算機(jī)系的學(xué)生學(xué)號(hào)和姓名。
(2)查詢每一門(mén)課的間接先行課(即先行課的先行課)。
(3)查詢學(xué)生的學(xué)號(hào)、姓名、選修課程的名稱和成績(jī)。
(4)查詢選修了課程的學(xué)生姓名。
(5)查詢所有學(xué)生的信息和所選修的課程。
(6)查詢已被選修的課程的情況和所有課程的名字。
(7)列出學(xué)生所有可能的選修情況。
(8)查找計(jì)算機(jī)系的學(xué)生選修課程數(shù)大于2 的學(xué)生的姓名、平均成績(jī)和選課 門(mén)數(shù),并按平均成績(jī)降序排列。
實(shí)驗(yàn) 3 交互式 SQL(2)數(shù)據(jù)庫(kù)嵌套查詢和組合查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模赫莆詹樵冎星短撞樵兒徒M合查詢的操作方法,進(jìn)一步加深對(duì) SELECT 語(yǔ)句的理解。
注意事項(xiàng):子句的使用;注意語(yǔ)句的層次嵌套關(guān)系和括號(hào)的配對(duì)使用問(wèn)題;
注意輸入SQL 語(yǔ)句時(shí)均應(yīng)使用西文操作符號(hào)。實(shí)驗(yàn)內(nèi)容(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)分組查詢。(3)統(tǒng)計(jì)查詢。(4)嵌套查詢。實(shí)驗(yàn)步驟
新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫(kù),輸入如下SELECT 查詢語(yǔ)句并執(zhí)行,對(duì)數(shù)據(jù)庫(kù)進(jìn)行嵌套查詢和組合查詢操作。
(1)統(tǒng)計(jì)選修了【數(shù)據(jù)庫(kù)原理】課程的學(xué)生人數(shù)。
(2)查詢沒(méi)有選修【數(shù)據(jù)庫(kù)原理】課程的學(xué)生信息。
(3)查詢其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。
(4)查詢被0602001 學(xué)生或0602002 學(xué)生所選修的課程的課程號(hào)(用UNION 組合查詢與IN 條件查詢兩種方法實(shí)現(xiàn))。
(5)查詢0602001 學(xué)生和0602002 學(xué)生同時(shí)選修的課程的課程號(hào)(用
INTERSECT 組合查詢與EXISTS 嵌套子查詢兩種方法實(shí)現(xiàn))。
(6)查詢被0602001 學(xué)生選修,但沒(méi)有被0602002 學(xué)生所選修的課程的課程
號(hào)(用EXCEPT 組合查詢與NOT EXISTS 嵌套子查詢兩種方法實(shí)現(xiàn))。
實(shí)驗(yàn) 4 交互式 SQL(3)數(shù)據(jù)的更新 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模菏煜げ迦?、修改和刪除SQL 語(yǔ)句的用法。注意事項(xiàng):對(duì)于INSERT 語(yǔ)句,要求理解默認(rèn)值約束、空值約束在插入時(shí)所 起的作用。實(shí)驗(yàn)內(nèi)容
(1)使用INSERT 語(yǔ)句在數(shù)據(jù)庫(kù)的表中插入幾行記錄。(2)使用UPDATA 語(yǔ)句修改某個(gè)數(shù)據(jù)。(3)使用DELETE 語(yǔ)句刪除某行記錄。實(shí)驗(yàn)步驟
(1)新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫(kù)。
(2)在已建立StudentCourseYYXXXX 數(shù)據(jù)庫(kù)和StudentsYYXXXX、CoursesYYXXXX、SCYYXXXX 3 個(gè)表的基礎(chǔ)上,向StudentCourseYYXXXX數(shù)據(jù)庫(kù)中 的表更新數(shù)據(jù)。
① 向表StudentsYYXXXX 中插入(0601001,趙林, 男,1985-09-08,計(jì)算機(jī))的記錄。
② 向SCYYXXXX 表中添加一個(gè)學(xué)生的選課記錄,學(xué)號(hào)為0601001,所選的課
程號(hào)為C2。SC表中有Sno、Cno、Grade 這3 個(gè)列。這里只知道學(xué)號(hào)和課程號(hào),不知道成績(jī)值。
③ 向表StudentsYYXXXX 中插入(0601002,張修雨,default)記錄,該記錄 的數(shù)據(jù)中default 表示默認(rèn)值‘男’,其他數(shù)據(jù)表示空值。
④ 用CREATE 語(yǔ)句建立表StudentBAK1YYXXXX,包含(與Students 的Sno、Sname、Sdept 相同)3 個(gè)字段,然后用INSERT SELECT 語(yǔ)句實(shí)現(xiàn)向
StudentBAK1YYXXXX 添加StudentsYYXXXX 表中的計(jì)算機(jī)系學(xué)生的學(xué)號(hào)、姓名、所在系的信息。
⑤ 用 SELECT...INTO 語(yǔ)句實(shí)現(xiàn)把StudentsYYXXXX 表中1986 年后(包含
1986 年)出生的學(xué)生的學(xué)號(hào)、姓名存儲(chǔ)到一個(gè)新表StudentBAK2YYXXXX。
⑥ 將姓名為【趙林】的同學(xué)的所在系改為【機(jī)電系】,愛(ài)好改為【足球】。
⑦ 將選修了課程名為【數(shù)據(jù)庫(kù)原理】的學(xué)生成績(jī)加5 分。⑧ 將StudentCourseYYXXXX
數(shù)據(jù)庫(kù)的StudentBAK1YYXXXX 表中所有姓趙的 同學(xué)刪除。
⑨ 刪除計(jì)算機(jī)系選修成績(jī)不及格的學(xué)生選修記錄。⑩ 將除。StudentCourseYYXXXX
數(shù)據(jù)庫(kù)的StudentBAK2YYXXXX 表中的所有行刪
四.實(shí)驗(yàn)總結(jié)
實(shí)驗(yàn)一要注意創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表時(shí)應(yīng)認(rèn)真,如果出現(xiàn)錯(cuò)誤,應(yīng)相應(yīng)地修改結(jié)構(gòu)或刪除。輸入SQL 語(yǔ)句時(shí)應(yīng)注意,語(yǔ)句中均使用西文操作符號(hào);實(shí)驗(yàn)二應(yīng)注意注意group和having以及where的搭配使用的情況;實(shí)驗(yàn)三注意注意輸入SQL 語(yǔ)句時(shí)均應(yīng)使用西文操作符號(hào),子句的使用,注意語(yǔ)句的層次嵌套關(guān)系和括號(hào)的配對(duì)使用問(wèn)題;實(shí)驗(yàn)四注意輸入SQL 語(yǔ)句時(shí)均應(yīng)使用西文操作符號(hào),對(duì)于INSERT 語(yǔ)句,要求理解默認(rèn)值約束、空值約束在插入時(shí)所起的作用。注意插入,修改,新建表,刪除語(yǔ)句的寫(xiě)法,并且掌握把原表中的數(shù)據(jù)轉(zhuǎn)存到新表中的語(yǔ)句寫(xiě)法。
第二篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)一 PowerDesigner 的 CDM 應(yīng)用
1:實(shí)驗(yàn)?zāi)康?/p>
使用PowerDesinger進(jìn)行數(shù)據(jù)庫(kù)概念模型設(shè)計(jì),掌握CDM中的實(shí)體、實(shí)體屬性、實(shí)體與實(shí)體之間聯(lián)系的操作方法。2:實(shí)驗(yàn)內(nèi)容
建立一個(gè)“實(shí)驗(yàn)一練習(xí)”命名的Conceptual Data Model(CDM)文件,其中應(yīng)包括的實(shí)體、實(shí)體的屬性及實(shí)體之間的聯(lián)系。3:實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
初次接觸數(shù)據(jù)庫(kù)原理實(shí)驗(yàn),相對(duì)來(lái)說(shuō)還是比較陌生,但老師講解還相對(duì)比較清楚,并且實(shí)驗(yàn)報(bào)告寫(xiě)的十分清楚,只是遇到多建立了一個(gè)實(shí)體而無(wú)法刪除的問(wèn)題,通過(guò)同學(xué)的幫助也解決了,相對(duì)來(lái)說(shuō)第一次實(shí)驗(yàn)還是比較順利的。
實(shí)驗(yàn)二 PowerDesigner 的 PDM 應(yīng)用
1.實(shí)驗(yàn)?zāi)康?/p>
用PowerDesinger的工具將CDM生成PDM過(guò)程,熟悉PDM工作區(qū),為生成數(shù)據(jù)庫(kù)中的物理的表打下基礎(chǔ)。完成這個(gè)實(shí)驗(yàn)后,應(yīng)該能夠了解從CDM到PDM的轉(zhuǎn)換過(guò)程,熟悉PowerDesinger的PDM工作區(qū),使用工具選項(xiàng)板進(jìn)行PDM對(duì)象設(shè)計(jì)。
2.實(shí)驗(yàn)內(nèi)容
從CDM生成PDM,設(shè)計(jì)結(jié)束后,利用PowerDesigner的“生成數(shù)據(jù)庫(kù)”功能,產(chǎn)生數(shù)據(jù)庫(kù)中各數(shù)據(jù)對(duì)象的定義,再運(yùn)行MySQL的命令行客戶端軟件,打開(kāi)test數(shù)據(jù)庫(kù),運(yùn)行crebas.sql,同時(shí)進(jìn)行中英文的轉(zhuǎn)換,最后運(yùn)行show tables命令查看表。
3.實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
經(jīng)過(guò)本次實(shí)驗(yàn),學(xué)會(huì)了用PowerDesinger的工具將CDM生成PDM過(guò)程,并且利用crebas.sql進(jìn)行中英文的轉(zhuǎn)換,最后利用show tables命令查看表,受益匪淺。
實(shí)驗(yàn) 三Navicat for MySQL的使用和SQL語(yǔ)言數(shù)據(jù)定義語(yǔ)言DDL 1.實(shí)驗(yàn)?zāi)康?/p>
了解Navicat for MySQL的啟動(dòng),熟悉如何在Navicat for MySQL下配置數(shù)據(jù)庫(kù)聯(lián)接。了解DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,學(xué)會(huì)在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng) 2.實(shí)驗(yàn)內(nèi)容
1.啟動(dòng)Navicat for MySQL。
2.在MySQL–新建連接中完成連接參數(shù)配置,并完成連接測(cè)試和保存連接參數(shù)。3.查看mysql數(shù)據(jù)庫(kù)的help_category表的定義、表中數(shù)據(jù)與索引、完整性約束等。4.查看mysql數(shù)據(jù)庫(kù)的其它數(shù)據(jù)庫(kù)對(duì)象,如視圖、索引、存儲(chǔ)過(guò)程、函數(shù)、觸發(fā)器。5.在Navicat for MySQL中打開(kāi)查詢,新建查詢,運(yùn)行簡(jiǎn)單的SQL語(yǔ)句,如select * from help_keyword where help_keyword_id<=3;觀察下結(jié)果。3.實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
使用navicat for MySQL連接數(shù)據(jù)庫(kù)的時(shí)候,不能正常連接到數(shù)據(jù)庫(kù),出現(xiàn)“access denied for user’root@’localhost”的錯(cuò)誤提示,經(jīng)過(guò)查找發(fā)現(xiàn)是MySQL沒(méi)有正確安裝,重裝之后就可以正常的訪問(wèn)數(shù)據(jù)庫(kù),在本次實(shí)驗(yàn)中也學(xué)會(huì)了Navicat for MySQL的基礎(chǔ)的查詢使用以及簡(jiǎn)單的SQL語(yǔ)句的運(yùn)行。
實(shí)驗(yàn) 四 SQL語(yǔ)言數(shù)據(jù)定義語(yǔ)言DDL 1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解SQL語(yǔ)言中DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng)。掌握使用SQL語(yǔ)句增加或刪除約束,加深對(duì)完整性概念的理解,達(dá)到靈活應(yīng)用的目的。掌握使用SQL語(yǔ)句定義和刪除同義詞。2:實(shí)驗(yàn)原理
在 Navicat for MySQL 中使用 CREATE 命令完成對(duì)表、索引、視圖、同義詞 的創(chuàng)建,使用 DROP 命令完成對(duì)表、索引、視圖、同義詞的刪除,使用 ALTER 命 令對(duì)表結(jié)構(gòu)進(jìn)行修改及完整性約束的增加、刪除。
3:實(shí)驗(yàn)代碼及結(jié)果 相應(yīng)SQL語(yǔ)句為:
CREATE TABLE NewTable(studentid varchar(10)NOT NULL , name varchar(20)NOT NULL , sex varchar(2)NOT NULL , age integer NOT NULL , Fee decimal(10,2)NULL , address varchar(50)NULL , memo varchar(300)NULL , PRIMARY KEY(studentid));
截圖如下:
3.用Create Table語(yǔ)句建表CourseAa,相應(yīng)的SQL語(yǔ)句為: CREATE TABLE CourseAa(Aa1 Varchar(20), Aa2 INTEGER, Aa3 decimal(10)); 截圖如下:
5.用Create Table語(yǔ)句建表ChooseBb 相應(yīng)的SQL語(yǔ)句如下: CREATE TABLE ChooseBb(Bb1 VARCHAR(30), Bb2 INTEGER, Bb3 DECIMAL(6));
6.用Drop Table語(yǔ)句刪除表CourseAa,相應(yīng)的SQL語(yǔ)句如下: Drop table CourdeAa;
7.用Alter Table語(yǔ)句更新表ChooseBb,添加一個(gè)屬性名Bb4,類型Varchar,長(zhǎng)度20,完整性約束設(shè)為非空值,缺省值設(shè)為字符“系統(tǒng)測(cè)試值”,相應(yīng)的SQL語(yǔ)句如下: ALTER TABLE choosebb ADD Bb4 VARCHAR(30)NOT NULL;
8.用Alter Table語(yǔ)句更新表ChooseBb,添加一個(gè)屬性名Bb5,類型Varchar, 長(zhǎng)度10,完整性約束設(shè)為主碼。完成后,表ChooseBb的設(shè)計(jì)如下所示。相應(yīng)的SQL語(yǔ)句如下:
ALTER TABLE choosebb ADD Bb5 VARCHAR(30)PRIMARY KEY;
9.用Create View語(yǔ)句建立一個(gè)視圖View_Choosebb,生成的視圖屬性名(View_bb1,View_bb2,view_bb3), 其中View_bb1對(duì)應(yīng)于基表ChooseBb的Bb1、View_bb2對(duì)應(yīng)于基表ChooseBb的Bb4、view_bb3對(duì)應(yīng)于基表ChooseBb的Bb5。完成后,視圖View_Choosebb的設(shè)計(jì)如下所示。
相應(yīng)的SQL語(yǔ)句如下:
CREATE VIEW View_Choosebb AS SELECT Bb4 AS View_bb1,View_bb2 FROM chooseBb;CREATE VIEW View_Choosebb AS SELECT Bb5 AS View_bb3 FROM chooseBb;10.用Drop View語(yǔ)句刪除視圖View_Choosebb。相應(yīng)的SQL語(yǔ)句如下: DROP VIEW View_choosebb;11.用Create Index語(yǔ)句對(duì)表ChooseBb的Bb2屬性建立一個(gè)升序索引,索引名Index_bb2。用Create Index語(yǔ)句對(duì)表ChooseBb的Bb4屬性建立一個(gè)降序索引,索引名Index_bb4。相應(yīng)的SQL語(yǔ)句如下:
CREATE INDEX Index_bb2 ON ChooseBb(Bb4 DESC);12.用Drop Index語(yǔ)句刪除索引Index_bb2。相應(yīng)的SQL語(yǔ)句如下:
DROP INDEX Index_bb2 ON ChooseBb;
4:實(shí)驗(yàn)中遇到的問(wèn)題及心得體會(huì)
1、用Drop Table語(yǔ)句刪除表CourseAa的時(shí)候,在SQL瀏覽框中輸入語(yǔ)句并運(yùn)行,發(fā)現(xiàn)左邊項(xiàng)目欄中還是有CourseAa表的存在,但是確打不開(kāi)CourseAa表,弄了很長(zhǎng)時(shí)間,也不知道是什么情況,最后嘗試刷新頁(yè)面之后,發(fā)現(xiàn)語(yǔ)句運(yùn)行正確,CourseAa表成功刪除。
2、由于理論課時(shí)查詢語(yǔ)言之學(xué)到了表的查詢,到后面實(shí)驗(yàn)中涉及視圖的建立及查詢,也不清楚是怎么回事,而且由于對(duì)查詢語(yǔ)句的不熟悉,實(shí)驗(yàn)過(guò)程中進(jìn)行緩慢,視圖的部分是課下看書(shū)慢慢寫(xiě)的,沒(méi)有截圖。
通過(guò)這次實(shí)驗(yàn),初步了解了SQL語(yǔ)言中DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng)。掌握使用SQL語(yǔ)句增加或刪除約束。因?yàn)閷?shí)驗(yàn)過(guò)程中對(duì)這些語(yǔ)句的不熟悉耽誤課很長(zhǎng)時(shí)間,還需課下多下工夫多看、多寫(xiě)。
實(shí)驗(yàn)五
SQL語(yǔ)言數(shù)據(jù)操縱語(yǔ)言DML
1:實(shí)驗(yàn)?zāi)康?/p>
SQL 語(yǔ)言的數(shù)據(jù)操縱功能通過(guò) DML(數(shù)據(jù)維護(hù)語(yǔ)言)實(shí)現(xiàn)。DML 包括數(shù)據(jù)查詢 和數(shù)據(jù)更新兩種數(shù)據(jù)操縱語(yǔ)句。其中,數(shù)據(jù)查詢指對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢、統(tǒng)計(jì)、分組、排序等操作;數(shù)據(jù)更新指數(shù)據(jù)的插入、更新和刪除等數(shù)據(jù)維護(hù)操作。
本次實(shí)驗(yàn)了解 DML 語(yǔ)言的 INSERT、UPDATE、DELETE 等數(shù)據(jù)維護(hù)語(yǔ)言,掌握 在 Navicat for MySQL 中用 DML 語(yǔ)言的 INSERT、UPDATE、DELETE 對(duì)表進(jìn)行數(shù)據(jù) 插入、更新和刪除。
2實(shí)驗(yàn)內(nèi)容
在 Navicat for MySQL 中使用 INSERT 語(yǔ)句向表中插入數(shù)據(jù)。使用 UPDATE 語(yǔ)句更新(修改)表中已有數(shù)據(jù)。使用 DELETE 語(yǔ)句刪除表中數(shù)據(jù)。
3:實(shí)驗(yàn)代碼及結(jié)果
1、用Create Table語(yǔ)句建立test表,其語(yǔ)句和截圖如下所示; CREATE TABLE `NewTable`(`Name` varchar(20)NOT NULL , `Age` integer NULL , `Score` numeric(10,2)NOT NULL , `Address` varchar(60)NULL);
2、繼續(xù)用Create Table語(yǔ)句建立test_temp表,其語(yǔ)句同1。
3、用INSERT語(yǔ)句對(duì)表test_temp,插入如實(shí)驗(yàn)報(bào)告中的三條記錄,其插入語(yǔ)句和截圖如下: INSERT INTO test_temp
VALUES('鄭七',21,'490.50','重郵宿舍11-2-1');INSERT INTO test_temp
VALUES('張八',20,'560.00','南福苑3-3-3');INSERT INTO test_temp
VALUES('王九',10,'515.00','學(xué)生新區(qū)19-7-1');
4、用INSERT INTO…SELECT…FROM語(yǔ)句,將test_temp表中的數(shù)據(jù),插入到test中,其語(yǔ)句及其截圖如下: INSERT INTO test
SELECT * FROM test_temp;
5、用UPDATE語(yǔ)句將test表中年齡小于20的數(shù)據(jù),將其成績(jī)更新為原來(lái)的成績(jī)加5分,其語(yǔ)句和截圖如下:
UPDATE test SET Score=Score+5 WHERE Age<=20;
6用UPDATE語(yǔ)句將test表中居住在南福苑所有的學(xué)生年齡減少1歲,其語(yǔ)句和截圖如下:、UPDATE test SET Age=Age-1 WHERE Address Like '南福苑%';
7、用DELETE語(yǔ)句將test表中年齡大于等于21 并且成績(jī)大于等于500的學(xué)生數(shù)據(jù)刪除,其語(yǔ)句和截圖如下: DELETE FROM test
WHERE Score<=500 AND Age>=21;
8、用DELETE語(yǔ)句將test表中成績(jī)小于550并且居住在重郵宿舍的學(xué)生數(shù)據(jù)刪除,其語(yǔ)句和截圖如下:
DELETE FROM test WHERE Score<=550 AND Address LIke'重郵宿舍%';
4實(shí)驗(yàn)心得
這次實(shí)驗(yàn)從實(shí)驗(yàn)原理還是實(shí)驗(yàn)操作來(lái)說(shuō)還是相對(duì)簡(jiǎn)單的,但越是對(duì)簡(jiǎn)單的是就越容易犯迷糊,這次件表命名給了我很多啟示,以后對(duì)細(xì)節(jié)還是要十分注意的。
實(shí)驗(yàn)六 SQL語(yǔ)言數(shù)據(jù)查詢語(yǔ)言DQL
1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解 SQL 語(yǔ)言的 SELECT 語(yǔ)句對(duì)數(shù)據(jù)的查詢,學(xué)會(huì)在 Navicat for MySQL 中用 SELECT 語(yǔ)句對(duì)表中的數(shù)據(jù)進(jìn)行簡(jiǎn)單查詢、連接查詢、嵌套查詢和組 合查詢。2:實(shí)驗(yàn)原理
在 Navicat for MySQL 中使用 SELECT 語(yǔ)句從表中查詢數(shù)據(jù)、統(tǒng)計(jì)數(shù)據(jù)及對(duì) 數(shù)據(jù)進(jìn)行分組和排序等操作。3:實(shí)驗(yàn)代碼及結(jié)果
1.用 Create Table 建立 Student 表:
2.用 Create Table 建立 Course 表:
3.用 Create Table 建立 Choose 表:
4.用 INSERT 語(yǔ)句向 Student 表中插入 3 個(gè)元組:
5.用 INSERT 語(yǔ)句向 Course 表中插入 3 個(gè)元組:
6.用 INSERT 語(yǔ)句向 Choose 表中插入 7 個(gè)元組:
7.用 SELECT 語(yǔ)句,查詢計(jì)算機(jī)學(xué)院學(xué)生的學(xué)號(hào)和姓名。
8.用 SELECT 語(yǔ)句的 between?and?表示查詢條件,查詢年齡在 20~23 歲的學(xué) 生信息。
9.用 SELECT 語(yǔ)句的 COUNT()聚集函數(shù),統(tǒng)計(jì) Student 表中學(xué)生總?cè)藬?shù)。
10.分別用 SELECT 語(yǔ)句的 max()、min()、sum()、avg()四個(gè)聚集函數(shù),計(jì)算 Choose 表中 C1 課程的最高分、最低分、總分、平均分。max():
Min():
Sum();
avg():
11.用 SELECT 語(yǔ)句對(duì)空值(NULL)的判斷條件,查詢 Course 表中先修課稱編號(hào)為 空值的課程編號(hào)和課程名稱。
12.用 SELECT 語(yǔ)句的連接查詢,查詢學(xué)生的學(xué)號(hào)、姓名、選修的課程名及成績(jī)。
13.用 SELECT 的存在量詞 EXISTS,查詢與“張三”在同一個(gè)學(xué)院學(xué)習(xí)的學(xué)生信 息。
14.用 SELECT 語(yǔ)句的嵌套查詢,查詢選修 C1 課程的成績(jī)低于“張三”的學(xué)生的 學(xué)號(hào)和成績(jī)。
15.用 SELECT 語(yǔ)句的組合查詢(UNION),查詢選修了 C1 課程或者選修了 C3 課程 的學(xué)生學(xué)號(hào)。
16.用 SELECT 語(yǔ)句的組合查詢(UNION)與 DISTINCT 短語(yǔ),查詢選修了 C1 課程或 者選修了 C3 課程的學(xué)生學(xué)號(hào),并取消重復(fù)的數(shù)據(jù)。
4.實(shí)驗(yàn)心得
本次實(shí)驗(yàn)室相對(duì)于前幾次來(lái)說(shuō)比較困難的一次,因?yàn)檎Z(yǔ)句剛學(xué)過(guò),下去也沒(méi)有及時(shí)去練習(xí),對(duì)于很多還是比較困難,在本次實(shí)驗(yàn)中通過(guò)練習(xí),讓我了解 SQL 語(yǔ)言的 SELECT 語(yǔ)句對(duì)數(shù)據(jù)的查詢,學(xué)會(huì)在 Navicat forMySQL 中用 SELECT 語(yǔ)句對(duì)表中的數(shù)據(jù)進(jìn)行簡(jiǎn)單查詢、連接查詢、嵌套查詢和組合查詢。課下時(shí)間也會(huì)多多練習(xí)SQl語(yǔ)句。
實(shí)驗(yàn)七
MYSQL應(yīng)用開(kāi)發(fā)環(huán)境的建立
1:實(shí)驗(yàn)?zāi)康?/p>
通過(guò)在Windows平臺(tái)下,搭建Apache Httpd Web服務(wù)器,PHP腳本支持,訪問(wèn)MySQL數(shù)據(jù)庫(kù)等,學(xué)習(xí)了解MySQL應(yīng)用開(kāi)發(fā)環(huán)境的建立過(guò)程。本次實(shí)驗(yàn)通過(guò)安裝Apache HTTD Server 2.2、PHP 5.3.28,配置httpd.conf和PHP.ini文件,完成MySQL的PHP應(yīng)用開(kāi)發(fā)環(huán)境的建立。2:實(shí)驗(yàn)內(nèi)容
1、按照實(shí)驗(yàn)指導(dǎo)安裝Apache http Server。成功后,截圖如下:
2、配置Apache服務(wù)器支持PHP文件解析,截圖如下:
3、實(shí)驗(yàn)測(cè)試成功,截圖如下:
3:遇到的問(wèn)題及解決 配置PHP擴(kuò)展支持MySQL數(shù)據(jù)庫(kù)。用記事本打開(kāi)php5.3.28之下的php.ini文件,把;extension=php_mysql.dll去掉。只是去掉了extension=php_mysql.dll,而,而沒(méi)有其前面的分號(hào)去掉就保存了文件。
4:實(shí)驗(yàn)心得
通過(guò)在 Windows平臺(tái)下,搭建 Apache Httpd Web 服務(wù)器,PHP 腳本支持,訪問(wèn) MySQL 數(shù)據(jù)庫(kù)等,我學(xué)習(xí)了解 了MySQL 應(yīng)用開(kāi)發(fā)環(huán)境的建立過(guò)程。學(xué)會(huì)了安裝 Apache HTTD Server 2.2、PHP 5.3.28,配置 httpd.conf和 PHP.ini 文件,完成 MySQL 的 PHP 應(yīng)用開(kāi)發(fā)環(huán)境的建立。
實(shí)驗(yàn)八 MySQL的存儲(chǔ)過(guò)程
1:實(shí)驗(yàn)?zāi)康?/p>
存儲(chǔ)過(guò)程分為兩類:1.系統(tǒng)提供的存儲(chǔ)過(guò)程;2.用戶自定義存儲(chǔ)過(guò)程。
存儲(chǔ)過(guò)程具有的優(yōu)點(diǎn):1.存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件式編程;2.存儲(chǔ)過(guò)程能夠?qū)?現(xiàn)較快的執(zhí)行速度;3.存儲(chǔ)過(guò)程能夠減少網(wǎng)絡(luò)流量;4.存儲(chǔ)過(guò)程可被作為一種安 全機(jī)制來(lái)充分利用。存儲(chǔ)過(guò)程是可復(fù)用的組件!想象一下如果你改變了主機(jī)的語(yǔ) 言,這對(duì)存儲(chǔ)過(guò)程不會(huì)產(chǎn)生影響,因?yàn)樗菙?shù)據(jù)庫(kù)邏輯而不是應(yīng)用程序。存儲(chǔ)過(guò) 程是可以移植的!
本次實(shí)驗(yàn)了解 MySQL 存儲(chǔ)過(guò)程的創(chuàng)建、修改和刪除的方法和步驟,掌握在 Navicat for MySQL中對(duì)存儲(chǔ)過(guò)程的進(jìn)行創(chuàng)建、修改和刪除,掌握在MySQL Command Line Client 中調(diào)用帶參數(shù)和不帶參數(shù)的存儲(chǔ)過(guò)程。
2:實(shí)驗(yàn)內(nèi)容
1、MySQL Command Line Client中創(chuàng)建存儲(chǔ)過(guò)程,按照實(shí)驗(yàn)指導(dǎo)書(shū)創(chuàng)建第一、第二個(gè)存儲(chǔ)過(guò)程及其調(diào)用。
2、調(diào)用第三、第四個(gè)傳出參數(shù)的存儲(chǔ)過(guò)程:
3、創(chuàng)建存儲(chǔ)過(guò)程third_p(),顯示表cqupt中的數(shù)據(jù),并對(duì)其進(jìn)行調(diào)用測(cè)試。
4、創(chuàng)建存儲(chǔ)過(guò)程simpleproc2(),對(duì)傳入?yún)?shù)進(jìn)行乘以10的處理,變量定義@x,并對(duì)其進(jìn)行調(diào)用測(cè)試。5.用Drop Procedure語(yǔ)句刪除存儲(chǔ)過(guò)程first_p。
3:實(shí)驗(yàn)結(jié)果
4:心得體會(huì)
通過(guò)此次實(shí)驗(yàn),學(xué)會(huì)了在MySQL Command Line Client中創(chuàng)建存儲(chǔ)過(guò)程及其調(diào)用,并傳遞參數(shù)對(duì)其進(jìn)行調(diào)用測(cè)試.實(shí)驗(yàn)九MySQL的觸發(fā)器和SQL語(yǔ)言數(shù)據(jù)控制語(yǔ)言DCL 1:實(shí)驗(yàn)?zāi)康?/p>
觸發(fā)器是特定事件出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行的代碼塊,類似于存儲(chǔ)過(guò)程。觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別在于:存儲(chǔ)過(guò)程是由用戶或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的,由DBMS自動(dòng)執(zhí)行。觸發(fā)器具有這些功能:
1、允許/限制對(duì)表的修改;
2、自動(dòng)生成派生列,比如自增字段;
3、強(qiáng)制數(shù)據(jù)一致性;
4、提供審計(jì)和日志記錄;
5、防止無(wú)效的事務(wù)處理;
6、啟用復(fù)雜的業(yè)務(wù)邏輯。
本次實(shí)驗(yàn)了解MySQL觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在Navicat for MySQL中對(duì)觸發(fā)器的進(jìn)行創(chuàng)建、修改和刪除,掌握觸發(fā)器觸發(fā)測(cè)試的方法。2:實(shí)驗(yàn)內(nèi)容
1、創(chuàng)建觸發(fā)器audit_student,該觸發(fā)器對(duì)修改student表的時(shí)間、用戶名記錄到日志表中。
2.執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的第二部分改造簡(jiǎn)單觸發(fā)器,增加觸發(fā)類型判斷功能,驗(yàn)證觸發(fā)器的改造和改造后的觸發(fā)器觸發(fā)測(cè)試。3.自行編寫(xiě)student表的觸發(fā)器aduit_student_update,在對(duì)student表進(jìn)行更新操作前觸發(fā),觸發(fā)時(shí),向student_log表寫(xiě)入觸發(fā)用戶、觸發(fā)時(shí)間和觸發(fā)類型。并對(duì)該新建進(jìn)行觸發(fā)測(cè)試。
4.自行編寫(xiě)student表的觸發(fā)器aduit_student_delete,在對(duì)student表進(jìn)行刪除操作后觸發(fā),觸發(fā)時(shí),向student_log表寫(xiě)入觸發(fā)用戶、觸發(fā)時(shí)間和觸發(fā)類型。并對(duì)該新建進(jìn)行觸發(fā)測(cè)試。
3:實(shí)驗(yàn)結(jié)果
①輸入如下語(yǔ)句,建立實(shí)驗(yàn)表student,如圖所示: create table student(SNO varchar(10),SNAME varchar(30),Sage Int);
②輸入如下語(yǔ)句,建立日志表student_log,并查看日志表是否為空,如圖所示:
create table student_log(who varchar(30),whattimeTIMESTAMP);
select * from student_log;
③輸入如下語(yǔ)句,在student表上語(yǔ)句觸發(fā)器,如圖所示: use test;
Create trigger audit_student Beforeinsert On student For each row Begin Insert into student_log(Who,whattime)Values(current_user,current_timestamp);End;
建立④輸入如下語(yǔ)句對(duì)觸發(fā)器進(jìn)行INSERT觸發(fā)測(cè)試,如圖所示: 對(duì)student表做一個(gè)INSERT操作:
Insert into student values('1992150033','吳思遠(yuǎn)',40);
輸入如下語(yǔ)句查看表student_log,檢查觸發(fā)器工作結(jié)果,表student_log中數(shù)據(jù)如圖所示:
select * from student_log;
①輸入如下語(yǔ)句,修改日志表結(jié)構(gòu),增加一個(gè)屬性存放觸發(fā)語(yǔ)句類型。如圖所示: alter table student_log add(action varchar(20));
②修改觸發(fā)器,記錄觸發(fā)語(yǔ)句類型。選中student表,單擊右鍵,選擇設(shè)計(jì)表,點(diǎn)擊觸發(fā)器選項(xiàng)卡,在定義中對(duì)INSERT進(jìn)行編輯,如圖所示:
select * from student_log
4:實(shí)驗(yàn)心得
本次實(shí)驗(yàn)讓我了解 MySQL 觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在
Navicat for MySQL 中對(duì)觸發(fā)器進(jìn)行創(chuàng)建、修改和刪除的步驟,掌握了觸發(fā)器觸發(fā)測(cè)試的方法。
實(shí)驗(yàn)十SQL的數(shù)據(jù)控制通過(guò)DCL(數(shù)據(jù)控制語(yǔ)言)實(shí)現(xiàn)
1:實(shí)驗(yàn)?zāi)康?/p>
DCL 通過(guò)對(duì)數(shù)據(jù)庫(kù)用戶的授 權(quán)和權(quán)限回收命令來(lái)實(shí)現(xiàn)有關(guān)數(shù)據(jù)的存取控制,以保證數(shù)據(jù)庫(kù)的安全性
本次實(shí)驗(yàn)了解 DCL 語(yǔ)言的 GRANT 和 REVOKE 語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限的控制,學(xué)會(huì)在Navicat for MySQL中用GRANT、REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行設(shè)定。
2:實(shí)驗(yàn)內(nèi)容
1.登錄mysql,創(chuàng)建用戶jason,密碼為abc123,并授權(quán)該用戶完整訪問(wèn)數(shù)據(jù)庫(kù)test。即執(zhí)行如下DCL語(yǔ)句:GRANT ALL ON test.* TO jason@“%”IDENTIFIED BY “abc123”;2.啟動(dòng)另外一個(gè)Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置
3.對(duì)user表進(jìn)行授予權(quán)限操作,并用select insert 進(jìn)行測(cè)試 4.對(duì)user表進(jìn)行收回權(quán)限操作,用select insert語(yǔ)句進(jìn)行測(cè)試 3:實(shí)驗(yàn)結(jié)果
GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;GRANT SELECT on mysql.host to jason;
2、將數(shù)據(jù)庫(kù) mysql 中表 host 的查詢權(quán)限從用戶 jason 回收
3.創(chuàng)建用戶jason,密碼為abc123,并授權(quán)該用戶完整訪問(wèn)數(shù)據(jù)庫(kù)test。GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;
4.啟動(dòng)另外一個(gè)Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置。為了能查詢到相應(yīng)的數(shù)據(jù),我們必須進(jìn)行授權(quán)操作。語(yǔ)句如下: Grant select on mysql.user to jason;
授權(quán)后,現(xiàn)在切換到Navicat for MySQL,執(zhí)行之前窗口中的查詢語(yǔ)句:
5、接下來(lái),切換到MySQL的命令行客戶端,創(chuàng)建一個(gè)簡(jiǎn)單的表,切換到Navicat for MySQL,新建一個(gè)查詢:
insert into mysql.dcltest(id,name)values(1,'張三豐');
6、切換到MySQL的命令行客戶端,執(zhí)行如下授權(quán)語(yǔ)句,進(jìn)行INSERT權(quán)限的授予: Grant insert on mysql.user to jason;
輸入如下查詢語(yǔ)句:
Select * from mysql.dcltest;
權(quán)限授予后,root(數(shù)據(jù)庫(kù)超級(jí)用戶)可以進(jìn)行權(quán)限的回收。
7、切換到Navicat for MySQL,新建一個(gè)查詢,執(zhí)行如下插入語(yǔ)句: insert into mysql.dcltest(id,name)values(2,'掃地僧');執(zhí)行如下權(quán)限回收語(yǔ)句:
Revoke insert on mysql.dcltest from jason;
新建一個(gè)查詢,執(zhí)行如下查詢語(yǔ)句: select * from mysql.dcltest;
Revoke select on mysql.dcltest from jason;
4:實(shí)驗(yàn)心得
通過(guò)本次實(shí)驗(yàn),我了解DCL語(yǔ)言的GRANT和REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限的控制,學(xué)會(huì)在Navicat for MySQL中用GRANT、REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行設(shè)定。
實(shí)驗(yàn)十一MySQL的事務(wù)與鎖
1:實(shí)驗(yàn)?zāi)康?/p>
事務(wù)(Transaction)是MySQL數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)邏輯工作單元,是完成一組數(shù)據(jù)庫(kù)操作的程序執(zhí)行單元;鎖(Lock)是MySQL數(shù)據(jù)庫(kù)系統(tǒng)中并發(fā)控制的常用方法.本次實(shí)驗(yàn)了解MySQL事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握MySQL Command Line Client中如何進(jìn)行相關(guān)操作。了解MySQL的表鎖定與鎖定解除,掌握MySQL Command Line Client中如何進(jìn)行相關(guān)操作。2:實(shí)驗(yàn)內(nèi)容
啟動(dòng)MySQL的命令行客戶端,輸入密碼mysql(小寫(xiě));執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的1部分,學(xué)習(xí)和驗(yàn)證MySQL的事務(wù);在實(shí)驗(yàn)步驟2的基礎(chǔ)上,在數(shù)據(jù)bankrecord的表record中,添加一個(gè)元組id為3的張六,初始余額2萬(wàn);自己寫(xiě)事務(wù)完成如下操作:李四向張六轉(zhuǎn)賬5千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬1萬(wàn)5,然后確認(rèn)轉(zhuǎn)賬;執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的2部分,學(xué)習(xí)和驗(yàn)證MySQL的鎖;在步驟4的基礎(chǔ)上,在數(shù)據(jù)庫(kù)bookrecord的表sellrecord中,添加一個(gè)元組id為2000的書(shū)籍Oracle數(shù)據(jù)庫(kù)實(shí)用教程庫(kù),存為2本;在當(dāng)前MySQL命令行客戶端里面模擬李四購(gòu)書(shū),另外啟動(dòng)一個(gè)MySQL命令行客戶端,模擬王五購(gòu)書(shū);要求使用寫(xiě)鎖先鎖定后,再修改,因?yàn)閹?kù)存有兩本,所以李四和王五都能買(mǎi)到,庫(kù)存為0,并且兩人的名字都出現(xiàn)在buyername 3:實(shí)驗(yàn)結(jié)果
create database bankrecord character set utf8 collate utf8_general_ci;use bankrecord;
create table record(id int,name varchar(20),jine decimal(8,2));
set names gbk;
insert into record values(1, '李四',20000);insert into record values(2, '王五',20000);start transaction;
update record set jine=jine-10000 where name='李四';select * from record;rollback;
select * from record;
1、查看數(shù)據(jù)庫(kù)自動(dòng)提交模式是否打開(kāi):
2,按照實(shí)驗(yàn)指導(dǎo)先建立數(shù)據(jù)庫(kù)、表和向表中插入初始賬戶記錄:
3、完成開(kāi)始事務(wù),從李四賬戶轉(zhuǎn)出 1 萬(wàn)元,向王五賬戶中轉(zhuǎn)入 1 萬(wàn)元,提交確認(rèn)轉(zhuǎn)賬:
4、安實(shí)驗(yàn)指導(dǎo)執(zhí)行語(yǔ)句先建立數(shù)據(jù)庫(kù)、表和向表中插入初始書(shū)籍記錄:
5、在數(shù)據(jù)庫(kù) bankrecord 的表 record 中,添加一個(gè)元組id 為 3 的張六,初始余額 2 萬(wàn),李四向張六轉(zhuǎn)賬 5 千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬 1 萬(wàn) 5,然后確認(rèn)轉(zhuǎn)賬(語(yǔ)句在圖中顯示):
6、在數(shù)據(jù)庫(kù) bookrecord 的表 sellrecord 中,添加一個(gè)元組id 為 2000 的書(shū)籍 Oracle 數(shù)據(jù)庫(kù)實(shí)用教程庫(kù),存為 2 本(相關(guān)語(yǔ)句在圖中顯示):
7、在當(dāng)前 MySQL 命令行客戶端里面模擬李四購(gòu)書(shū),另外啟動(dòng)一個(gè) MySQL 命令行客戶 端,模擬王五購(gòu)書(shū)(語(yǔ)句在圖中顯示)。
4:實(shí)驗(yàn)心得
本次實(shí)驗(yàn)了解 MySQL 事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。了解 MySQL 的表鎖定與鎖定解除,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。
實(shí)驗(yàn)十二MySQL的常用函數(shù)MySQL 1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解 MySQL 常用字符串、日期和時(shí)間函數(shù)等的使用,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。常用函數(shù)包括常用字符串、日期和時(shí)間函數(shù)等各類函數(shù)。2:實(shí)驗(yàn)內(nèi)容
啟動(dòng) MySQL 的命令行客戶端,輸入密碼 mysql(小寫(xiě));執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的 1 部分,學(xué)習(xí)和驗(yàn)證 MySQL 的字符串函數(shù);在實(shí)驗(yàn)步驟 2 的基礎(chǔ)上,學(xué)習(xí)如下兩個(gè)函數(shù)并完成題目:定位和位置函數(shù) LOCATE(substr,str),返回字符串 str 中子字符串 substr 的第一次出現(xiàn)位置,如果 str 中不包含 substr,返回 0。
請(qǐng)使用LOCATE函數(shù)計(jì)算needle在haystackneedlehaystack第一次出現(xiàn)的位置;子字符串函數(shù) SUBSTRING(str,pos,len),從字符串 str 返回一個(gè)長(zhǎng)度同 len 字符相同的子字符串,起始于位置 pos;請(qǐng)使用 SUBSTRING 函數(shù)計(jì)算 backspace,從第 2 個(gè)字符起,長(zhǎng)度為 5 的子字符串;字符串函數(shù)的解答腳本和結(jié)果請(qǐng)保存,老師會(huì)檢查;執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的 2 部分,學(xué)習(xí)和驗(yàn)證 MySQL 的日期和時(shí)間函數(shù);在步驟 4 的基礎(chǔ)上,學(xué)習(xí)如下一個(gè)函數(shù)并完成題目:周函數(shù) WEEK(date),返回 date 時(shí)間包含的星期數(shù);請(qǐng)使用 WEEK 函數(shù)計(jì)算當(dāng)前日期包含的星期數(shù)。3:實(shí)驗(yàn)結(jié)果
4:實(shí)驗(yàn)心得
通過(guò)本次實(shí)驗(yàn)掌握了MySQL 常用函數(shù)包括常用字符串、日期和時(shí)間函數(shù)等各類函數(shù),并且學(xué)會(huì)了MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。
第三篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)7 索引和數(shù)據(jù)完整性的使用
1、目的與要求
(1)掌握索引的使用方法;
(2)掌握數(shù)據(jù)完整性的實(shí)現(xiàn)方法;
2、實(shí)驗(yàn)準(zhǔn)備
(1)了解索引的作用與分類;(2)掌握索引的創(chuàng)建方法;
(3)理解數(shù)據(jù)的完整性的概念與分類;(4)掌握各種數(shù)據(jù)完整性的實(shí)現(xiàn)方法。
3、實(shí)驗(yàn)內(nèi)容
(1)建立索引
①使用CREATE INDEX語(yǔ)句創(chuàng)建索引。
對(duì)YGGL數(shù)據(jù)庫(kù)的Employees表中的DepartmentID列建立索引。在查詢分析器中輸入如下程序并執(zhí)行: USE YGGL GO CREATE INDEX depart_ind
ON Employees(DepartmentID)GO 在Employees表的Name列和Address列上建立復(fù)合索引。CREATE INDEX Ad_ind
ON Employees(Name,Address)對(duì)Departments表上的DepartmentName列建立唯一非聚集索引。CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName)【思考與練習(xí)】
a.索引創(chuàng)建完后在對(duì)象資源管理器中查看表中的索引。b.了解索引的分類情況
c.使用CREATE INDEX語(yǔ)句能創(chuàng)建主題嗎? d.在什么情況下可以看到建立索引的好處?
②使用界面方式創(chuàng)建索引。
使用界面方式在Employees表的PhoneNumber列上創(chuàng)建索引。
啟動(dòng)SQL Server Management Studio,在對(duì)象資源管理器中展開(kāi)數(shù)據(jù)庫(kù)YGGL,展開(kāi)表Employees,右擊“索引,選擇“新建索引”選項(xiàng)。在新建索引的窗口中填寫(xiě)索引的名稱和類型,單擊“添加”按鈕,在列表框中選擇要?jiǎng)?chuàng)建的索引的列,選擇完單擊“確定”按鈕即完成創(chuàng)建工作。【思考與練習(xí)】
a.使用界面方式創(chuàng)建一個(gè)復(fù)合索引。
b.在Employees表的表設(shè)計(jì)窗口選擇Address列,右擊選擇“索引/鍵”菜單項(xiàng),在新窗口中的Address列創(chuàng)建一個(gè)唯一的索引。
c.創(chuàng)建一個(gè)數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。
(2)重建索引。
重建表Employees中的所有索引。USE YGGL GO ALTER INDEX ALL
ON Employ REBUILD 【思考與練習(xí)】重建表Employees中EmployeeID列上的索引。
(3)刪除索引。
使用DROP INDEX語(yǔ)句刪除表Employees上的索引Depart_ind,計(jì)劃使用如下SQL語(yǔ)句:
DROP INDEX Depart_ind ON Employees 【思考與練習(xí)】
a.使用QROP INDEX一次刪除Employees表上的多個(gè)索引 b使用界面方式刪除Department表上的索引。
(4)數(shù)據(jù)完整性。
①創(chuàng)建一個(gè)表Employees5,只含EmployeesID,Name,Sex和Education列。將Name,設(shè)為主鍵,作為列Name的約束。對(duì)EmployeesID列進(jìn)行UNIQUE約束,并作為表的約束。
CREATE TABLE Employees5(EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID))
②刪除上例中創(chuàng)建的UNIQUE約束。ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO 【思考與練習(xí)】
a.使用T-SQL命令創(chuàng)建一個(gè)新表,使用一個(gè)復(fù)合列作為主鍵,作為表的約束,并為其命名。b.使用語(yǔ)句為表ALTER TABLEEmployees5添加一個(gè)新列Address,并為該列定義UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIOQUE約束。
③創(chuàng)建新表student,只考慮“號(hào)碼”和“性別”兩列,性別只能包含男或女。CREATE TABLE student(號(hào)碼char(6)NOT NULL 性別char(2)Employees
CHECK(性別 IN(“男”,“女”))
【思考與練習(xí)】 向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會(huì)發(fā)生什么情況。
④創(chuàng)建新表Salary2,結(jié)構(gòu)與Salary相同,但Salary2表不可以O(shè)utCome列大于Income列。
CREATE TABLE Salary2(EmployeesID char(6)NOT NULL Income Float NOT NULL, OUTCOME FLOAT NOT NULL, CHECK(INCOME>=OUTCOME))【思考與練習(xí)】
a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會(huì)有什么情況。b.創(chuàng)建一個(gè)表Employees6,只考慮“學(xué)號(hào)”和“出生日期”兩列,出生日期必須晚于1980年1月1日。
⑤對(duì)YGGL數(shù)據(jù)庫(kù)中的Employees表進(jìn)行修改,為其增加“DepartmentID”字段的CHECK約束。
use YGGL go alter table Employees add constraint depart check(DepartmentID>=1 and DepartmentID<=5)【思考與練習(xí)】測(cè)試CHECK約束的有效性。
⑥創(chuàng)建一個(gè)規(guī)則對(duì)象,用以限制輸入到該規(guī)則所綁定的列中的值只能是該規(guī)則中列出的值。
create rule list_rule as @list in('財(cái)務(wù)部','研發(fā)部','人力資源部','銷(xiāo)售部')go exec sp_bindrule 'list_rule','Departments.DepartmentName' go 【思考與練習(xí)】創(chuàng)建一個(gè)規(guī)則對(duì)象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。
刪除上述建立的規(guī)則對(duì)象。
⑦創(chuàng)建一個(gè)表Salary3,要求所有Salary3表上EmployeeID列的值都要出現(xiàn)在Salary表中,利用參照完整性約束實(shí)現(xiàn),要求當(dāng)刪除或修改Salary表上的EmployeeID列時(shí),Salary3表中的EmployeeID值也會(huì)隨之變化
create table Salary3(EmployeeID char(6)not null primary key, InCome float not null, OutCome float(8)not null, foreign key(EmployeeID)references Salary(EmployeeID)on update cascade
on delete cascade)
4、實(shí)驗(yàn)結(jié)果
(1)建立索引 ①【思考與練習(xí)】
a.索引創(chuàng)建完后在對(duì)象資源管理器中查看表中的索引。
b.了解索引的分類情況
答:索引分為兩類:分別是聚集索引和非聚集索引,其中有唯一索引和復(fù)合索引。每一個(gè)表中只可以有一個(gè)聚集索引,但可以有多個(gè)非聚集索引。c.使用CREATE INDEX語(yǔ)句能創(chuàng)建主題嗎? 不可以
d.在什么情況下可以看到建立索引的好處? 當(dāng)要在龐大的數(shù)據(jù)庫(kù)中尋找自己想要的數(shù)據(jù)的時(shí)候,建立索引是很有好處的,優(yōu)點(diǎn)如下:
第一:通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。
第二:可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。第三:可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
第四:在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。第五,通過(guò)使用索引,可以在查詢的過(guò)程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
②【思考與練習(xí)】
a.使用界面方式創(chuàng)建一個(gè)復(fù)合索引。
b.在Employees表的表設(shè)計(jì)窗口選擇Address列,右擊選擇“索引/鍵”菜單項(xiàng),在新窗口中的Address列創(chuàng)建一個(gè)唯一的索引。
c.創(chuàng)建一個(gè)數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。
(2)重建索引。
【思考與練習(xí)】重建表Employees中EmployeeID列上的索引。USE YGGL GO create index employid_ind ON Employees(EmployeeID)GO ALTER INDEX employid_ind ON Employees REBUILD GO
(3)刪除索引。
【思考與練習(xí)】
a.使用QROP INDEX一次刪除Employees表上的多個(gè)索引
USE YGGL GO DROP INDEX Employees.depart_ind,Employees.Employ_ind GO
b使用界面方式刪除Department表上的索引。
(4)數(shù)據(jù)完整性。
②【思考與練習(xí)】
a.使用T-SQL命令創(chuàng)建一個(gè)新表,使用一個(gè)復(fù)合列作為主鍵,作為表的約束,并為其命名。
USE YGGL GO CREATE TABLE Employ(EmployeeID char(8)NOT NULL, Name char(10)NOT NULL, Sex bit NOT NULL, Education char(5), CONSTRAINT UK_id PRIMARY KEY(EmployeeID,Name,Sex))
b.使用語(yǔ)句為表ALTER TABLEEmployees5添加一個(gè)新列Address,并為該列定義UNIQUE 約束。
USE YGGL GO ALTER TABLE Employees5 ADD Address varchar(40)NULL CONSTRAINT USK_id UNIQUE GO
C.使用界面方式為一個(gè)新表定義主鍵和UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIQUE約束。
③【思考與練習(xí)】
向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會(huì)發(fā)生什么情況。
④【思考與練習(xí)】
a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會(huì)有什么情況。
INSERT 語(yǔ)句與CHECK 約束“CK__Salary2__1A14E395”沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)“YGGL”,表“dbo.Salary2”。
語(yǔ)句已終止。
b.創(chuàng)建一個(gè)表Employees6,只考慮“學(xué)號(hào)”和“出生日期”兩列,出生日期必須晚于1980年1月1日。USE YGGL
GO CREATE TABLE Employees6(學(xué)號(hào) char(6)NOT NULL,出生日期
varchar(20)NOT NULL
CHECK(出生日期>'1980-1-1'))
⑤【思考與練習(xí)】測(cè)試CHECK約束的有效性。
insert into Employees6 values('001','1980-1-0')
INSERT 語(yǔ)句與CHECK 約束“CK__Employees6__出生日期__1BFD2C07”沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)“YGGL”,表
“dbo.Employees6”, column '出生日期'。語(yǔ)句已終止。結(jié)果是:上面的記錄添加不進(jìn)去.表現(xiàn)出了check的有效性.⑥【思考與練習(xí)】創(chuàng)建一個(gè)規(guī)則對(duì)象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。USE YGGL
GO CREATE RULE Emp_rule
AS @Emp like'[0-20]' GO EXEC sp_bindrule 'Emp_rule','Employees.WorkYear' GO
刪除上述建立的規(guī)則對(duì)象。USE YGGL
GO EXEC sp_unbindrule 'Employees.WorkYear' DROP RULE Emp_rule GO
⑦a.創(chuàng)建完Salary3表后,初始化該標(biāo)的數(shù)據(jù)與salary表相同。刪除salary表中一行數(shù)據(jù),在查看salary3表的內(nèi)容,看看會(huì)發(fā)生什么情況。
B.使用ALTER TABLE語(yǔ)句向salary表中的EmployeeID列上添加一個(gè)外鍵,要求EmployeeIs表中要?jiǎng)h除或修改與EmployeeID值有關(guān)的行時(shí),檢查Salary表中有沒(méi)有與該EployeeID值相關(guān)的記錄,如果存在則拒絕更新Emloyees表。C.在對(duì)象資源管理器中建立Departments、Employees和Salary三個(gè)表之間的參照關(guān)系。
第四篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
數(shù)據(jù)庫(kù)系統(tǒng)原理課程設(shè)計(jì)
總結(jié)報(bào)告
學(xué)院: 軟件學(xué)院 專業(yè): 軟件工程 年級(jí): 2009 學(xué)號(hào): 20092647 姓名: 李野
1、開(kāi)發(fā)環(huán)境
Windows7系統(tǒng)
2、DBMS系統(tǒng)架構(gòu)
采用向量的存儲(chǔ)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)字典信息;屬性信息,表結(jié)構(gòu),索引結(jié)構(gòu),用戶授權(quán)機(jī)制都用相應(yīng)的類表示;將表實(shí)體(表中內(nèi)容)存儲(chǔ)在文件中,方便查閱;每當(dāng)執(zhí)行相應(yīng)的SQL語(yǔ)句時(shí)只需查閱數(shù)據(jù)字典及修改數(shù)據(jù)文件。
3、DBMS主要功能模塊
(1)DDL功能模擬(2)DML功能模擬
(3)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化(4)DCL功能模擬
3.1 SQL語(yǔ)言的詞法和語(yǔ)法分析(1)功能介紹
判斷輸入的SQL語(yǔ)句是否符合詞法以及語(yǔ)法規(guī)則
(2)相關(guān)理論
將輸入的文本當(dāng)成一個(gè)字符串來(lái)處理,通過(guò)匹配該字符串中的關(guān)鍵字來(lái)確定要做什么功能,若都不能匹配,則說(shuō)明出現(xiàn)詞法或語(yǔ)法錯(cuò)誤。
(3)算法描述
將輸入的文本保存在字符串s1中,將s1用換行符“n”分割,保存在array[]中,掃描字符串?dāng)?shù)組中的每個(gè)成員。
a.若以“create table”開(kāi)頭,查找information文件是否含有“create table”后的表的信息,如果有,則返回true,表示數(shù)據(jù)字典中已有該表,若返回false,表示數(shù)據(jù)字典中沒(méi)有該表信息,則把相應(yīng)的屬性名及其類型寫(xiě)進(jìn)數(shù)據(jù)字典,并標(biāo)明是否有主外鍵。b.若以“drop table”開(kāi)頭,則調(diào)用“drop”函數(shù)
表示刪除表。
c.若以“alter table”開(kāi)頭,判斷其后是否有“add”或“drop”,“add”表示添加屬性,“drop”表示刪除屬性。
d.若以“insert”開(kāi)頭,調(diào)用“insert()”函數(shù),表示插入元組。e.若以“delete”開(kāi)頭,調(diào)用“delete()”函數(shù),表示刪除元組。f.若以“update”開(kāi)頭,判斷其后是否有“where”條件,若有,則調(diào)用“update()”函數(shù),否則調(diào)用“update0()”函數(shù),表示修改相應(yīng)的元組。g.若以“select”開(kāi)頭,判斷其后是否有“*”,若有,則調(diào)用“selectall()”函數(shù),否則調(diào)用“select()”函數(shù),表示查詢。
h.若以“create unique index”開(kāi)頭,則調(diào)用“index()”函數(shù),表示創(chuàng)建索引。
i.若以“drop index”開(kāi)頭,則調(diào)用“dropindex()”函數(shù),表示刪除索引。
(4)程序流程圖
開(kāi)始將文本框中內(nèi)容保存在字符串中Create table開(kāi)頭Drop table開(kāi)頭alter table開(kāi)頭insert開(kāi)頭delete開(kāi)頭Create unique index開(kāi)頭Drop index開(kāi)頭刪除該表信息,并修改數(shù)據(jù)字典數(shù)據(jù)字典中是否有該表信息否是寫(xiě)回?cái)?shù)據(jù)字典Drop添加屬性判斷其后為“add”或“drop”add插入元組刪除元組創(chuàng)建索引刪除索引標(biāo)記該表已存在刪除屬性
表3.1-1
3.2創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)操作功能(1)功能介紹
1、實(shí)現(xiàn)建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)的功能。
a.支持整型、符點(diǎn)型、字符型數(shù)據(jù)。b.以文件形式保存基本表。c.建立相應(yīng)的數(shù)據(jù)字典。
2、實(shí)現(xiàn)輸入數(shù)據(jù)庫(kù)記錄的功能。
3、實(shí)現(xiàn)刪除數(shù)據(jù)庫(kù)記錄的功能。
4、實(shí)現(xiàn)修改數(shù)據(jù)庫(kù)記錄的功能。
5、實(shí)現(xiàn)顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)和內(nèi)容(以表格形式顯示)。
6、實(shí)現(xiàn)在已有的關(guān)系中添加屬性的功能;
7、實(shí)現(xiàn)從已有的關(guān)系中刪除屬性的功能;
8、實(shí)現(xiàn)刪除表的功能。
(2)相關(guān)理論
通過(guò)編寫(xiě)一系列的SQL語(yǔ)句,實(shí)現(xiàn)創(chuàng)建表,刪除表,插入屬性,刪除屬性,插入元組,刪除元組,修改元組,查找元組等一系列操作。
(3)算法描述
a.創(chuàng)建表
首先判斷該表是否存在,若不存在則將create table 后的語(yǔ)句保存,即將屬性名及類型存儲(chǔ)到數(shù)據(jù)字典中,否則輸出“該表已存在”。b.刪除表
首先在數(shù)據(jù)字典中將該表信息找到,并將其刪除,再找到該數(shù)據(jù)文件,也將其刪除,若該表有索引文件,也將該索引文件刪除。c.添加屬性
在數(shù)據(jù)字典中找到該表位置,將要添加的屬性名及類型追加到末尾。d.刪除屬性
在數(shù)據(jù)字典中找到該表并找到該屬性,將該屬性刪除,找到該表的數(shù)據(jù)文件,刪除此文件中該屬性域。e.插入元組
讀數(shù)據(jù)字典,找到該文件,并記錄該表屬性的名字及類型與要插入的數(shù)據(jù)進(jìn)行匹配,此時(shí)注意類型為“Int”“float”型的輸入是否正確,還要注意“char()”類型是否超界。若判斷完畢,將這些數(shù)據(jù)寫(xiě)到數(shù)據(jù)文件末尾,若該表有索引文件,還要基于插入新元組后的表建立新索引。f.刪除元組
查找數(shù)據(jù)文件,找到與“where”后的條件相符的元組,并刪除。g.修改元組
首先查看是否有“where”條件,若沒(méi)有,則將數(shù)據(jù)文件全部讀出,并將數(shù)據(jù)文件改成“set”后的條件;否則查找數(shù)據(jù)文件并全部讀出,找到與“where”后的條件相符的元組,根據(jù)“set”后的條件進(jìn)行修改,并寫(xiě)回文件中。
(4)程序流程圖
a.創(chuàng)建表程序流程圖
開(kāi)始文本中以create table開(kāi)頭查找數(shù)據(jù)字典是否有該表信息?否是將屬性名及類型寫(xiě)進(jìn)數(shù)據(jù)字典
表3.2-1
提示該表已尋在
b.刪除表程序流程圖
開(kāi)始文本以“drop table”開(kāi)始查找數(shù)據(jù)字典是否存在該表?是在數(shù)據(jù)字典中將該表信息刪除否提示不存在該表找到相應(yīng)數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-2
c.添加/刪除屬性程序流程圖
開(kāi)始文本以“alter table”開(kāi)始其后為“add”或“drop”add drop在數(shù)據(jù)字典中加入該屬性信息(名字及類型)在數(shù)據(jù)字典中刪除該屬性信息找到數(shù)據(jù)文件,刪除該屬性信息結(jié)束 表3.2-3
d.插入元組程序流程圖
開(kāi)始文本以“insert”開(kāi)始查數(shù)據(jù)字典,記錄屬性名及類型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類型輸入錯(cuò)誤寫(xiě)入數(shù)據(jù)文件尾是否有索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.2-4
e.刪除元組程序流程圖
開(kāi)始文本以“delete”開(kāi)始查找數(shù)據(jù)字典是否存在該表?是否讀數(shù)據(jù)文件提示不存在該表找到與“where”后相匹配的數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-5
f.修改元組程序流程圖
開(kāi)始文本以“update”開(kāi)始其后為是否有“where”條件無(wú)有將數(shù)據(jù)文件中相應(yīng)的內(nèi)容全部改為“set”后的條件找到數(shù)據(jù)文件中符合“where”后條件的元組將該元組相應(yīng)條件改為“set”后信息是否有相應(yīng)的索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.2-6
(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
a.創(chuàng)建表 測(cè)試用例: create table s(s# char(9)sname char(8)age int sex char(2)primary key s#)
create table c(c# char(5)cname char(20)teacher char(8)primary key c#)
create table sc(s# char(9)c# char(5)grade float primary out key s# from s primary out key c# from c)實(shí)驗(yàn)結(jié)果: b.刪除表 測(cè)試用例: drop table sc 實(shí)驗(yàn)結(jié)果:
C:插入元組 測(cè)試用例:
insert into s values('s1','lou',21,'F')insert into s values('s2','lu',20,'F')insert into s values('s3','ha',22,'M')insert into s values('s4','zhang',21,'F')insert into s values('s5','qian',20,'M')
insert into s values('s6','sun',18,'F')insert into s values('s7','lisan',21,'F')insert into s values('s8','qian',20,'M')insert into s values('s9','wugozi',18,'F')insert into c values('c1','math','zhao')insert into c values('c2','chinese','qian')insert into c values('c3','english','sun')insert into c values('c4','cs','li')insert into c values('c5','java','zhou')insert into c values('c6','c++','wu')insert into c values('c7','jsp','zheng')insert into c values('c8','j2ee','wang')insert into c values('c9','asp','sima')insert into sc values('s1','c1',67)insert into sc values('s2','c2',80)insert into sc values('s3','c3',100)insert into sc values('s4','c4',99)insert into sc values('s5','c5',87)insert into sc values('s6','c6',78)insert into sc values('s7','c7',90)insert into sc values('s8','c8',87)insert into sc values('s9','c9',78)實(shí)驗(yàn)結(jié)果:
d:刪除元組 測(cè)試用例:
delete from sc where(sc.s#='s6')實(shí)驗(yàn)結(jié)果:
e:修改元組 測(cè)試用例:
update sc set score=120 where s#='s5' 實(shí)驗(yàn)結(jié)果:
f:添加屬性 測(cè)試用例:
Alter table s add school char(20)實(shí)驗(yàn)結(jié)果:
g:刪除屬性 測(cè)試用例:
Alter table drop school
3.3索引的創(chuàng)建及刪除(1)功能介紹
a.為某關(guān)系的主屬性建立索引
b.利用索引屬性完成選擇操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
c.利用索引屬性完成連接操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
d.刪除索引
(2)相關(guān)理論
默認(rèn)每個(gè)塊有50個(gè)字節(jié),數(shù)據(jù)文件中的每個(gè)元組有自己的首指針(指向元組首部的文件指針),索引文件中存儲(chǔ)的是屬性域值及其塊號(hào)(塊號(hào)通過(guò)其首指針/50得到)。
(3)算法描述
a.創(chuàng)建索引
針對(duì)表的主鍵建立索引文件,找到數(shù)據(jù)文件中要建立索引的屬性域值,并記錄該元組的首指針,將其保存在索引文件中。
b.利用索引屬性完成選擇操作
在索引文件中找到“select”語(yǔ)句中“where”后的條件涉及的屬性(因?yàn)槭腔谥麈I建立的索引,所以只能通過(guò)主鍵的索引文件來(lái)查找相應(yīng)的信息),記錄索引域后的塊號(hào),將塊號(hào)*50就能得到相應(yīng)的文件指針,通過(guò)文件指針讀數(shù)據(jù)文件,就能找到相應(yīng)的元組。
c.利用索引屬性完成連接操作 d.刪除索引
找到相應(yīng)的索引文件將其永久刪除
(4)程序流程圖
a.創(chuàng)建索引文件
開(kāi)始數(shù)據(jù)字典有該屬性?是找到數(shù)據(jù)文件中要建立索引的屬性域記錄該元組的文件否指針并/50得到塊號(hào)一并寫(xiě)入索引文件結(jié)束 表3.3-1
b.利用索引屬性完成選擇操作
開(kāi)始查找索引文件中與“where”后條件相符的屬性域值找到?記錄該屬性域值得塊號(hào)否塊號(hào)*50得到文件指針查找數(shù)據(jù)文件找到該元組,輸出結(jié)束 表3.3-2
是c.刪除索引文件
開(kāi)始找到該索引文件?是否將該索引文件徹底刪除結(jié)束 表3.3-4
(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
a:創(chuàng)建索引文件 測(cè)試用例:
create index index on s 實(shí)驗(yàn)結(jié)果:
b:利用索引選擇
3.4查詢功能(1)功能介紹
a.實(shí)現(xiàn)全關(guān)系選擇操作 b.實(shí)現(xiàn)單關(guān)系投影操作
c.實(shí)現(xiàn)單關(guān)系選擇操作(允許多條件)d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作 f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作
(2)相關(guān)理論(3)算法描述
a.全關(guān)系的選擇操作
掃描數(shù)據(jù)字典,判斷是否有該表,如果有,則掃描數(shù)據(jù)文件,將數(shù)據(jù)文件中內(nèi)容全部輸出。
b.實(shí)現(xiàn)單關(guān)系的投影操作
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,記錄要投影的屬性是第幾個(gè),掃描數(shù)據(jù)文件,將每個(gè)元組中要查詢的屬性輸出。
c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,掃描數(shù)據(jù)文件,利用循環(huán)將滿足“where”后條件的元組選出。
d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,則記錄需要投影的屬性是第幾個(gè),查找數(shù)據(jù)文件,利用循環(huán)將滿足“where”條件的元組找出并屬性相應(yīng)的屬性值。
e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作
掃描數(shù)據(jù)字典,判斷是否有這兩個(gè)表,若有,則查找相關(guān)屬性,將兩個(gè)表中的相關(guān)屬性依據(jù)條件進(jìn)行匹配,若匹配成功,則表示連接成功,輸出連接結(jié)果。
f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 在以上的連接結(jié)果中挑選符合條件的元組輸出。g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作 在以上的結(jié)果中選擇要投影的屬性,輸出。
(4)程序流程圖
a.全關(guān)系的選擇操作
開(kāi)始掃描數(shù)據(jù)字典是否有該表?掃描數(shù)據(jù)文件并全部輸出結(jié)束 表3.4-1 b.實(shí)現(xiàn)單關(guān)系的投影操作
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是否有要投影的屬性否記錄要投影的屬性是第幾個(gè)掃描數(shù)據(jù)文件將該屬性值域輸出結(jié)束
表3.4-2 c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
是是否
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是記錄“where”條件并掃描是否掃描數(shù)據(jù)文件有與之匹配的元組?否輸出提示沒(méi)有符合條件的元組結(jié)束 表3,4-3 d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是記錄要投影的屬性是第幾個(gè)否記錄“where”條件并掃描掃描數(shù)據(jù)文件有與之匹配的元組?否是選擇要投影的屬性值域提示沒(méi)有符合條件的元組提示沒(méi)有符合條件的元組輸出結(jié)束 表3.4-4(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
測(cè)試用例:
select s#,sname,age,sex from s where s.sname='qian'ands.age>19 實(shí)驗(yàn)結(jié)果:
測(cè)試用例:
select sname,age,sex from s where s.s#='s6'ands.age=18ors.sname='li' 實(shí)驗(yàn)結(jié)果:
測(cè)試用例: link s,sc base sc 實(shí)驗(yàn)結(jié)果:
測(cè)試用例: link s,c,sc base sc 實(shí)驗(yàn)結(jié)果:
3.5查詢優(yōu)化
(1)功能介紹
在做兩個(gè)表連接時(shí),先將需要用到的元組找到,并不做笛卡爾積,這在一定程度上減少了全部選擇的時(shí)間。
(2)相關(guān)理論
在做兩個(gè)表連接時(shí),需要名字及類型相同的屬性用一定的條件進(jìn)行匹配,如果在做笛卡爾積之前就用這些條件把要用到的元組選出來(lái),既省空間又省時(shí)間。
(3)算法描述
首先查看表是否存在,若存在查找涉及到的屬性,記錄“where”后的條件,將兩個(gè)表中符合條件的元組都取出,將這些元組做連接。
(4)程序流程圖
開(kāi)始是否存在該表?是是否有涉及到的屬性?是否記錄“where”后的條件否將符合條件的元組先選出連接結(jié)束
表3.5-1 3.6數(shù)據(jù)庫(kù)保護(hù)功能(1)功能介紹
此DBMS系統(tǒng)有兩種用戶:管理員,普通用戶。
(2)相關(guān)理論
a.插入元組、修改元組時(shí),匹配每個(gè)屬性的類型,如果類型及長(zhǎng)度輸入有誤,則提示輸入錯(cuò)誤不寫(xiě)入數(shù)據(jù)源文件,若符合條件,則查看基于每個(gè)屬性是否有索引文件,如果有,則重寫(xiě)索引文件。
b.修改元組時(shí)也要判斷類型及長(zhǎng)度是否匹配,也要重寫(xiě)相應(yīng)的索引文件。c.每次做相應(yīng)操作前先考慮數(shù)據(jù)字典中是否有該表,是否有要查詢的屬性。
(3)算法描述
例如在做插入元組時(shí),首先查找數(shù)據(jù)字典有沒(méi)有待插入的表,如果有,則記錄每個(gè)屬性類型及長(zhǎng)度,將待插入數(shù)據(jù)與屬性進(jìn)行一一比對(duì),一旦有一個(gè)記錄不符合要求,也無(wú)法插入表中。
(4)程序流程圖
開(kāi)始文本以“insert”開(kāi)始查數(shù)據(jù)字典,記錄屬性名及類型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類型輸入錯(cuò)誤寫(xiě)入數(shù)據(jù)文件尾是否有索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.6-1
4、總結(jié)
通過(guò)對(duì)于DBMS系統(tǒng)的模擬,使我對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)有了更深刻的理解,了解了每個(gè)表信息的存儲(chǔ)結(jié)構(gòu),以及數(shù)據(jù)字典的相關(guān)說(shuō)明,也了解了主外鍵的意義與作用,也知道了插入元組的時(shí)候?qū)傩云ヅ鋯?wèn)題,以及對(duì)表的屬性域的修改等。通過(guò)編寫(xiě)程序,讓我對(duì)表連接有了更加系統(tǒng)的認(rèn)識(shí),也知道了在連接時(shí)先選出要查詢的元組更省時(shí)間,省空間。了解了怎樣存儲(chǔ)表信息才能既省空間又能保存表信息,沒(méi)有冗余情況。通過(guò)做實(shí)驗(yàn),我將理論與實(shí)踐有了更好的結(jié)合,不但提高了對(duì)理論的理解,更讓我對(duì)編程能力有了很好的鍛煉。
5、參考文獻(xiàn)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》 李建中 王珊編著 電子工業(yè)出版社 《Java技術(shù)及其應(yīng)用》 王克宏 編著 高等教育出版社
第五篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
10包三 李雅 100910306
實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)題目:
數(shù)據(jù)庫(kù)基本操作實(shí)驗(yàn)
二、實(shí)驗(yàn)?zāi)康模?/p>
掌握數(shù)據(jù)庫(kù)的建立、表的設(shè)計(jì)基本方法,通過(guò)實(shí)際操作熟練掌握數(shù)據(jù)庫(kù)的基本操作——數(shù)據(jù)的輸入與導(dǎo)入,表的設(shè)計(jì)。
三、實(shí)驗(yàn)內(nèi)容:
建立課程管理數(shù)據(jù)庫(kù),要求:
1.輸入老師、開(kāi)設(shè)課程、選課表、學(xué)生基本數(shù)據(jù)等,并輸入一些學(xué)生不同課程的考試成績(jī)。
2.建立查詢表,分別是成績(jī)查詢、學(xué)分查詢、不及格學(xué)生查詢。
3.建立窗體,分別顯示不及格學(xué)生的姓名、課程名稱、成績(jī)和班級(jí)ID。在成績(jī)查詢中顯示學(xué)生姓名及各科成績(jī)。在教師基本信息中顯示編號(hào)、職稱、工資、院系、等。同時(shí)建立開(kāi)設(shè)課程表和學(xué)生基本信息的窗體查詢。提供用戶一個(gè)簡(jiǎn)單的應(yīng)用程序界面,方便用戶操作使用。
4.制作報(bào)表。包括教師的授課報(bào)表,課程名稱及課程類別。學(xué)生的總成績(jī)報(bào)表,包括課程名稱、成績(jī)和學(xué)分。
注:課程及考試成績(jī)可以任意輸入。選課按照班級(jí)確定。
四、實(shí)驗(yàn)過(guò)程:
1、數(shù)據(jù)庫(kù)表設(shè)計(jì)
在表格內(nèi)填入教師基本信息、開(kāi)始課程、課程基本信息、選課表、學(xué)生基本信息。
教師基本信息:
開(kāi)設(shè)課程:
/ 7
10包三 李雅 100910306
課程基本信息:
選課表:
/ 7
10包三 李雅 100910306
學(xué)生基本信息:
2、查詢表: 成績(jī)查詢:
/ 7
10包三 李雅 100910306
學(xué)分查詢:
不及格學(xué)生查詢:
/ 7
10包三 李雅 100910306
3、窗體設(shè)計(jì): 不及格學(xué)生信息查詢:
成績(jī)查詢:
教師基本信息查詢:
開(kāi)設(shè)課程信息查詢:
/ 7
10包三 李雅 100910306
學(xué)生基本信息查詢:
4、報(bào)表: 教師的授課報(bào)表:
/ 7
10包三 李雅 100910306
學(xué)生的總成績(jī):
/ 7