數(shù)據(jù)庫(kù)實(shí)驗(yàn)大綱_第1頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)大綱_第2頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)大綱_第3頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)大綱_第4頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)大綱_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)一數(shù)據(jù)描述、定義實(shí)驗(yàn)一、學(xué)時(shí)4學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型演示、設(shè)計(jì)三、實(shí)驗(yàn)?zāi)康氖煜ず驼莆諗?shù)據(jù)庫(kù)的創(chuàng)建和連接方法;熟悉和掌握數(shù)據(jù)表的建立、修改和刪除;加深對(duì)表的實(shí)體完整性、參照完整性和用戶(hù)自定義完整性的理解。四、需用儀器、設(shè)備486及以上微機(jī);Windows95/97/98操作系統(tǒng);安裝了SQLSERVER五、實(shí)驗(yàn)準(zhǔn)備熟悉SQLSERVER工作環(huán)境;復(fù)習(xí)有關(guān)表的建立、修改和刪除的SQL語(yǔ)言命令;六、 實(shí)驗(yàn)方法及步驟介紹有關(guān)SQLSERVER的圖形界面工作環(huán)境;創(chuàng)建數(shù)據(jù)庫(kù)或連接已建立的數(shù)據(jù)庫(kù)在當(dāng)前數(shù)據(jù)庫(kù)上建立新表4.定義表的結(jié)構(gòu)A:用SQL命令形式B:用SQLSERVER提供的企業(yè)管理器以交互方式進(jìn)行進(jìn)一步定義表的主碼,外碼及在表上建立索引。將以上表的定義以?SQL文件的形式保存在磁盤(pán)上。修改表的結(jié)構(gòu)8.刪除表的定義七、 實(shí)驗(yàn)內(nèi)容背景材料:在以下實(shí)驗(yàn)中,使用學(xué)生-課程數(shù)據(jù)庫(kù),它描述了學(xué)生的基本信息課程的基本信息及學(xué)生選修課程的信息。1.創(chuàng)建學(xué)生-課程數(shù)據(jù)庫(kù)2.創(chuàng)建學(xué)生關(guān)系表S:學(xué)號(hào)姓名性別年齡所在系SnoSnameSsexSagesdept3.創(chuàng)建課程關(guān)系表C:課程號(hào)課程名先行課學(xué)分CnoCnameCpnoccredit4.創(chuàng)建課程關(guān)系表SC:學(xué)號(hào)課程號(hào)成績(jī)SnoCnograde

5.將以上創(chuàng)建表S、C、SC的SQL命令以.SQL文件的形式保存在磁盤(pán)上。6.在表S上增加“出生日期”屬性列。刪除表S的“年齡”屬性列。在表S上,按“Sno”屬性列的唯一值方式建立索引。在表SC上,按“grade”屬性列的多值方式建立索引。刪除表SC,利用磁盤(pán)上保存的.SQL文件重新創(chuàng)建表SC。選做:創(chuàng)建教材P74—75--習(xí)題5、SPJ數(shù)據(jù)庫(kù)中的四個(gè)關(guān)系S,P,J,SPJ。八、實(shí)驗(yàn)思考1、 定義表結(jié)構(gòu)是對(duì)數(shù)據(jù)模型的那個(gè)要素進(jìn)行描述,對(duì)主屬性有什么要求?2、 修改表結(jié)構(gòu)時(shí),能否修改已定義屬性的參數(shù)?新增加的屬性列能否定義為非空?為什么?3、 分別在表S、SC上按“sno”列的唯一值方式建立索引,可能出現(xiàn)問(wèn)題嗎?情況有什么區(qū)別?4、 能否在非主屬性列上建立索引?其恰當(dāng)?shù)姆绞绞鞘裁矗烤?、?wèn)題1、 在表的定義中,如何確定屬性是NOTNULL/NULL?(主碼,關(guān)鍵字,主屬性/主屬性)2、 能否將S,C,SC表單獨(dú)以一個(gè)數(shù)據(jù)文件的形式保存在磁盤(pán)上?3、 在表S的“SNO”,“SNAME”屬性上分別按唯一值方式建立索引和在S的“SNO”,“SNAME”上唯一值方式建立聯(lián)合索引有無(wú)區(qū)別?4、 要修改主屬性的定義,正確的方式是什么?實(shí)驗(yàn)二數(shù)據(jù)查詢(xún)實(shí)驗(yàn)實(shí)驗(yàn)二數(shù)據(jù)查詢(xún)實(shí)驗(yàn)一、學(xué)時(shí)6學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型綜合三、實(shí)驗(yàn)?zāi)康氖煜ず驼莆諏?duì)數(shù)據(jù)表中數(shù)據(jù)的查詢(xún)操作和SQL命令的使用,學(xué)會(huì)靈活熟練的使用SQL語(yǔ)句的各種形式;加深理解關(guān)系運(yùn)算的各種操作(尤其的關(guān)系的選擇,投影,連接和除運(yùn)算)四、需用儀器、設(shè)備486及以上微機(jī);Windows95/97/98操作系統(tǒng)安裝了SQLSERVER。五、實(shí)驗(yàn)準(zhǔn)備1.熟悉SQLSERVER工作環(huán)境;2.連接到學(xué)生-課程數(shù)據(jù)庫(kù)3?復(fù)習(xí)對(duì)表中數(shù)據(jù)查詢(xún)的SQL語(yǔ)言命令;六、實(shí)驗(yàn)方法及步驟.在表S、C、SC上進(jìn)行簡(jiǎn)單查詢(xún);.在表S、C、SC上進(jìn)行連接查詢(xún);.在表S、C、SC上進(jìn)行嵌套查詢(xún);4?使用聚合函數(shù)的查詢(xún);對(duì)數(shù)據(jù)的分組查詢(xún);6?對(duì)數(shù)據(jù)的排序查詢(xún)。七、實(shí)驗(yàn)內(nèi)容在表S,C,SC上完成以下查詢(xún):1.查詢(xún)學(xué)生的基本信息;select*froms查詢(xún)“CS”系學(xué)生的基本信息;select*fromswheresdept='cs'查詢(xún)“CS”系學(xué)生年齡不在19到21之間的學(xué)生的學(xué)號(hào)、姓名;selectsno,snamefromswheresagenotbetween19and21找出最大年齡;selectmax(sage)froms找出“CS”系年齡最大的學(xué)生,顯示其學(xué)號(hào)、姓名;selectsno,snamefromswheresage=(selectmax(sage)fromswheresdept='cs')找出各系年齡最大的學(xué)生,顯示其學(xué)號(hào)、姓名;createviewms(sdept,sage)asselectsdept,max(sage)sagefromstudentgroupbysdeptselectsno,snamefromstudent,mswherestudent.sdept=ms.sdeptandstudent.sage=ms.sage統(tǒng)計(jì)“CS”系學(xué)生的人數(shù);selectcount(sno)fromswheresdept='cs'統(tǒng)計(jì)各系學(xué)生的人數(shù),結(jié)果按升序排列;selectsdept,count(sno)snumfromsgroupbysdeptorderbysnumasc按系統(tǒng)計(jì)各系學(xué)生的平均年齡,結(jié)果按降序排列;selectsdept,avg(sage)avgagefromsgroupbysdeptorderbyavgagedesc查詢(xún)每門(mén)課程的課程名;selectcnamefromc查詢(xún)無(wú)先修課的課程的課程名和學(xué)分?jǐn)?shù);selectcname,ccreditfromcwherecpnoinnull統(tǒng)計(jì)無(wú)先修課的課程的學(xué)分總數(shù);selectsum(ccredit)fromcwherecpnoisnull統(tǒng)計(jì)每位學(xué)生選修課程的門(mén)數(shù)、學(xué)分及其平均成績(jī);selectcount(o)snum,sum(course.ccredit)scredit,avg(sc.grade)avggradefromsc,o=ogroupbysc.sno統(tǒng)計(jì)選修每門(mén)課程的學(xué)生人數(shù)及各門(mén)課程的平均成績(jī);selectcount(sno)snum,avg(grade)avggradefromscgroupbycno找出平均成績(jī)?cè)?5分以上的學(xué)生,結(jié)果按系分組,并按平均成績(jī)的升序排列;createviewavgs1asselectsno,avg(grade)avggradefromscgroupbysnoselectstudent.sno,sname,sdept,avggradefromavgs,studentwhereavggrade>=85andstudent.sno=avgs.snoorderbysdept,avggrade16.查詢(xún)選修了“1”或“2”號(hào)課程的學(xué)生學(xué)號(hào)和姓名;selectdistinctstudent.sno,snamefromsc,studentwheresc.sno=student.snoand(cno='1'orcno='2')17.查詢(xún)選修了“1”和“2”號(hào)課程的學(xué)生學(xué)號(hào)和姓名;selectstudent.sno,snamefromstudentwheresnoin(selectsnofromscwherecno='1'andsnoin(selectsnofromscwherecno='2'))18.查詢(xún)選修了課程名為“數(shù)據(jù)庫(kù)”且成績(jī)?cè)?0分以下的學(xué)生的學(xué)號(hào)、姓名和成績(jī);selectstudent.sno,sname,gradefromsc,student,coursewherecname='數(shù)據(jù)庫(kù)'andgrade<60andsc.sno=o=o19.查詢(xún)每位學(xué)生選修了課程的學(xué)生信息(顯示:學(xué)號(hào),姓名,課程號(hào),課程名,成績(jī));20.查詢(xún)沒(méi)有選修課程的學(xué)生的基本信息;selectdistinctstudent.sno,snamefromsc,course,studentwherestudent.snonotin(selectsc.snofromsc,course,studentwheresc.sno=o=o)21.查詢(xún)選修了3門(mén)以上課程的學(xué)生學(xué)號(hào);selectsnofromscgroupbysnohavingcount(*)>322.查詢(xún)選修課程成績(jī)至少有一門(mén)在80分以上的學(xué)生學(xué)號(hào);selectdistinctsnofromscwheregrade>8023.查詢(xún)選修課程成績(jī)均在80分以上的學(xué)生學(xué)號(hào);selectdistinctsnofromscwheresnonotin(selectsnofromscwheregrade<=80)24.查詢(xún)選修課程平均成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào);selectsnofromscgroupbysnohavingavg(grade)>8025.選做:針對(duì)SPJ數(shù)據(jù)庫(kù)中的四個(gè)表S,P,J,SPJ,完成教材P74-75--習(xí)題5中的查詢(xún)及教材P127--習(xí)題5中的查詢(xún)。實(shí)驗(yàn)三數(shù)據(jù)更新實(shí)驗(yàn)一、學(xué)時(shí)2學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型綜合、設(shè)計(jì)三、 實(shí)驗(yàn)?zāi)康氖煜ず驼莆諗?shù)據(jù)表中數(shù)據(jù)的插入、修改、刪除操作和命令的使用;加深理解表的定義對(duì)數(shù)據(jù)更新的作用四、 需用儀器、設(shè)備86及以上微機(jī);Windows95/97/98操作系統(tǒng);安裝了SQLSERVER五、 實(shí)驗(yàn)準(zhǔn)備熟悉SQLSERVER工作環(huán)境;連接到學(xué)生-課程數(shù)據(jù)庫(kù)復(fù)習(xí)對(duì)表中數(shù)據(jù)的插入、修改和刪除的SQL語(yǔ)言命令;六、實(shí)驗(yàn)方法及步驟將數(shù)據(jù)插入當(dāng)前數(shù)據(jù)庫(kù)的表S、C、SC中;A:用SQL命令形式B:用SQLSERVER提供的企業(yè)管理器以交互方式進(jìn)行將以上插入的數(shù)據(jù)分別以.SQL文件和.txt文件的形式保存在磁盤(pán)上;修改表S、C、SC中的數(shù)據(jù);A:用SQL命令形式B:用SQLSERVER提供的企業(yè)管理器以交互方式進(jìn)行刪除表S、C、SC中的數(shù)據(jù)。A:用SQL命令形式B:用SQLSERVER提供的企業(yè)管理器以交互方式進(jìn)行七、實(shí)驗(yàn)內(nèi)容將數(shù)據(jù)分別插入表S、C、SC;將表S、C、SC中的數(shù)據(jù)分別以.SQL文件和.txt文件的形式保存在磁盤(pán)上。在表S、C、SC上練習(xí)數(shù)據(jù)的插入、修改、刪除操作。(比較在表上定義/未定義主碼(PrimaryKey)或外碼(ForeignKey)時(shí)的情況)將表S、C、SC中的數(shù)據(jù)全部刪除,再利用磁盤(pán)上備份的數(shù)據(jù)來(lái)恢復(fù)數(shù)據(jù)。如果要在表SC中插入某個(gè)學(xué)生的選課信息(如:學(xué)號(hào)為“200215121”,課程號(hào)為“C123”,成績(jī)待定),應(yīng)如何進(jìn)行?求各系學(xué)生的平均成績(jī),并把結(jié)果存入數(shù)據(jù)庫(kù);將“CS”系全體學(xué)生的成績(jī)置零;刪除“CS”系全體學(xué)生的選課記錄;刪除學(xué)號(hào)為“S1”的相關(guān)信息;將學(xué)號(hào)為“S1”的學(xué)生的學(xué)號(hào)修改為“S001”;把平均成績(jī)大于80分的男同學(xué)的學(xué)號(hào)和平均成績(jī)存入另一個(gè)表S――GRADE(SNO,AVG——GRADE);把選修了課程名為“數(shù)據(jù)結(jié)構(gòu)”的學(xué)生的成績(jī)提高10%;把選修了“C2”號(hào)課程,且成績(jī)低于該門(mén)課程的平均成績(jī)的學(xué)生的成績(jī)提高5%;把選修了“C2”號(hào)課程,且成績(jī)低于該門(mén)課程的平均成績(jī)的學(xué)生成績(jī)刪除掉;選做:將數(shù)據(jù)插入SPJ數(shù)據(jù)庫(kù)中的四個(gè)表S,P,J,SPJ中,并以.SQL文件和.txt文件的形式保存在磁盤(pán)上。八、實(shí)驗(yàn)思考1.使用SQL的更新語(yǔ)句時(shí),一次可以對(duì)幾個(gè)表進(jìn)行更新。在進(jìn)行數(shù)據(jù)更新時(shí),可能產(chǎn)生破壞數(shù)據(jù)完整性的情況,因此,在數(shù)據(jù)更新(尤其是多表更新)時(shí),應(yīng)注意什么問(wèn)題。.比較表中定義/未定義主碼(PrimaryKey)時(shí),對(duì)表S的更新操作有何異同。.比較在表之間定義/未定義外碼(ForeignKey)時(shí),對(duì)表S的更新操作有何異同。若要修改已定義表的屬性或刪除已定義表的某一屬性列,應(yīng)如何進(jìn)行?九、問(wèn)題在表上未定義主碼時(shí),數(shù)據(jù)更新的情況?如果在表S和SC表上建立了外碼聯(lián)系時(shí),要?jiǎng)h除學(xué)號(hào)為'S2'的學(xué)生記錄,應(yīng)如何進(jìn)行?如果在表S和SC表上未建立外碼聯(lián)系,情況會(huì)是怎樣的?DELETEFROM"s"WHERE"s"."sno"='s2' ;

DELETEFROM"sc"WHERE"sc"."sno"='s2'DELETEFROM"sc"WHERE"sc"."sno"='s2'DELETEFROM"s"WHERE"s"."sno"='s2'實(shí)驗(yàn)四視圖的定義、使用實(shí)驗(yàn)實(shí)驗(yàn)四視圖的定義、使用實(shí)驗(yàn)一、學(xué)時(shí)2學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型綜合、設(shè)計(jì)三、實(shí)驗(yàn)?zāi)康氖煜ず驼莆諏?duì)數(shù)據(jù)表中視圖的定義操作和SQL命令的使用;熟悉和掌握對(duì)數(shù)據(jù)表中視圖的查詢(xún)操作和SQL命令的使用;熟悉和掌握對(duì)數(shù)據(jù)表中視圖的更新操作和SQL命令的使用,并注意視圖更新與基本表更新的區(qū)別與聯(lián)系;學(xué)習(xí)靈活熟練的進(jìn)行視圖的操作,認(rèn)識(shí)視圖的作用;四、需用儀器、設(shè)備486及以上微機(jī);Windows95/97/98操作系統(tǒng);安裝了SQLSERVER。五、實(shí)驗(yàn)準(zhǔn)備1.熟悉SQLSERVER工作環(huán)境;2.連接到學(xué)生-課程數(shù)據(jù)庫(kù)3.復(fù)習(xí)有關(guān)視圖操作的SQL語(yǔ)言命令;六、 實(shí)驗(yàn)方法及步驟視圖的定義視圖的查詢(xún)視圖的修改七、 實(shí)驗(yàn)內(nèi)容以S,C,SC表為基礎(chǔ)完成以下視圖定義及使用定義“IS”系學(xué)生基本情況視圖V_IS并查詢(xún)結(jié)果;將S,C,SC表中學(xué)生的學(xué)號(hào),姓名,課程號(hào),課程名,成績(jī)定義為視圖V_S_C_G并查詢(xún)結(jié)果;將各系學(xué)生人數(shù),平均年齡定義為視圖V_NUM_AVG并查詢(xún)結(jié)果;定義一個(gè)反映學(xué)生出生年份的視圖V_YEAR并查詢(xún)結(jié)果;將各位學(xué)生選修課程的門(mén)數(shù)及平均成績(jī)定義為視圖V_AVG_S_G并查詢(xún)結(jié)果;將各門(mén)課程的選修人數(shù)及平均成績(jī)定義為視圖V_AVG_C_G并查詢(xún)結(jié)果;查詢(xún)平均成績(jī)?yōu)?0分以上的學(xué)生學(xué)號(hào)、姓名和成績(jī);查詢(xún)各課成績(jī)均大于平均成績(jī)的學(xué)生學(xué)號(hào)、姓名、課程和成績(jī);createviewpjuncj(cno,avg-grade)asselectcno,avg(grade)fromscgroupbycnocreateviewxues(sno,sname,cno,cname,grade)asselectsc.sno,sname,o,cname,gradefromsc,student,coursewherestudent.sno=o=oselectstudent.sno,sname,o,gradefromstudent,scxwherenotexists(select*frompjcjwherenotexists(select*fromscywheregrade>avg_gradeandstudent.sno=o=o))andstudent.sno=x.sno按系統(tǒng)計(jì)各系平均成績(jī)?cè)?0分以上的人數(shù),結(jié)果按降序排列;通過(guò)視圖V_IS,分別將學(xué)號(hào)為“S1”和“S4”的學(xué)生姓名更改為“S1_MMM”,”S4_MMM”并查詢(xún)結(jié)果;通過(guò)視圖V_IS,新增加一個(gè)學(xué)生記錄('S12','YANXI',19,'IS'),并查詢(xún)結(jié)果;通過(guò)視圖V_IS,新增加一個(gè)學(xué)生記錄('S13','YANXI',19,'MA'),并查詢(xún)結(jié)果;通過(guò)視圖V_IS,刪除學(xué)號(hào)為“S12”和“S3”的學(xué)生信息,并查詢(xún)結(jié)果;要通過(guò)視圖V_S_C_G,將學(xué)號(hào)為“S12”的姓名改為“S12_MMM”,是否可以實(shí)現(xiàn)?要通過(guò)視圖V_AVG_S_G,將學(xué)號(hào)為“S1”的平均成績(jī)改為90分,是否可以實(shí)現(xiàn)?八、實(shí)驗(yàn)思考.在定義視圖的子查詢(xún)中,是否可以使用SQL查詢(xún)語(yǔ)句的任意子句及短語(yǔ)?需要注意什么?.視圖一經(jīng)定義后,就可以象基本表一樣用于查詢(xún),但DBMS執(zhí)行對(duì)視圖的查詢(xún)過(guò)程與執(zhí)行基本表的查詢(xún)過(guò)程有什么區(qū)別?通過(guò)視圖是否能更新數(shù)據(jù)?通常那些視圖可以進(jìn)行更新?使用視圖有什么好處?SQL語(yǔ)言提供了那些方式可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的安全保護(hù)功能?實(shí)驗(yàn)五SQL語(yǔ)言的DCL(安全性部分)一、學(xué)時(shí)2學(xué)時(shí)二、 實(shí)驗(yàn)類(lèi)型演示、設(shè)計(jì)三、 實(shí)驗(yàn)?zāi)康腟QL的數(shù)據(jù)控制通過(guò)DCL(數(shù)據(jù)控制語(yǔ)言)實(shí)現(xiàn)。DCL通過(guò)對(duì)數(shù)據(jù)庫(kù)用戶(hù)的授權(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ì)SQLServer2000的查詢(xún)分析器中用DCL語(yǔ)言對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行設(shè)定。四、 需用儀器、設(shè)備486及以上微機(jī);Windows2000操作系統(tǒng);安裝了SQLServer2000。五、 實(shí)驗(yàn)準(zhǔn)備熟悉SQLServer2000工作環(huán)境;連接到學(xué)生-課程數(shù)據(jù)庫(kù)復(fù)習(xí)有關(guān)DCL語(yǔ)言的GRANT和REVOKE語(yǔ)句命令;建立用戶(hù)U1、U2、U3、U4、U5、U6、U7,選擇全部為Connect角色。六、 實(shí)驗(yàn)內(nèi)容啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)軟件SQLServer2000的查詢(xún)分析器,用GRANT語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行授權(quán)操作,語(yǔ)法格式如下:GRANT〈系統(tǒng)特權(quán)組〉To〈用戶(hù)組>|PUBLICPUBLIC指數(shù)據(jù)庫(kù)的所有用戶(hù)。2.用REVOKE語(yǔ)句將DBA(數(shù)據(jù)庫(kù)管理員)、DBO(建庫(kù)用戶(hù))授與其它用戶(hù)對(duì)數(shù)據(jù)庫(kù)的操作權(quán)收回,語(yǔ)法格式如下:REVOKE〈權(quán)限組>|ALLPRIVILEGES[ON〈對(duì)象名〉]FROM〈用戶(hù)組名>|PUBLICON用于被回收特權(quán)的對(duì)象,ALLPRIVILEGES指回收所有特權(quán),PUBLIC指數(shù)據(jù)庫(kù)的所有用戶(hù)。七、實(shí)驗(yàn)過(guò)程(一)授權(quán)與回收。在SQLserver中建立多個(gè)用戶(hù),給他們賦予不同的權(quán)限,然后查看是否真正擁有被授予的權(quán)限了。(在SYSTEM(即DBA)與七個(gè)Connect用戶(hù)之間進(jìn)行授權(quán)。)把查詢(xún)Student表的權(quán)限授給用戶(hù)U1。(因?yàn)楫?dāng)前用戶(hù)即為SYSTEM,所以直接寫(xiě)授權(quán)語(yǔ)句即可。)GRANTSELECTONTABLEStudentTOU1;把對(duì)Student表和Course表的全部操作權(quán)限授予用戶(hù)U2和U3。GRANTALLPRIVILEGESONTABLEStudent,CourseTOU2,U3;把對(duì)表SC的查詢(xún)權(quán)限授予所有用戶(hù)。GRANTSELECTONTABLESCTOPUBLIC;把查詢(xún)Student表和修改學(xué)生學(xué)號(hào)的權(quán)限授給用戶(hù)U4。GRANTUPDATE(Sno),SELECTONStudentTOU4;把對(duì)表SC的INSERT權(quán)限授予U5,并允許U5將此權(quán)限再授予其他用戶(hù)。GRANTINSERTONSCTOU5WITHGRANTOPTION;用戶(hù)U5將對(duì)表SC的INSERT權(quán)限授予U6,并允許將權(quán)限轉(zhuǎn)授給其他用戶(hù)。首先應(yīng)該以U5的身份重新登錄數(shù)據(jù)庫(kù),然后再進(jìn)行授權(quán)。GRANTINSERTONSCTOU6WITHGRANTOPTION;用戶(hù)U6將對(duì)表SC的INSERT權(quán)限授予U7。首先應(yīng)該以U6的身份重新登錄數(shù)據(jù)庫(kù),然后再進(jìn)行授權(quán)。GRANTINSERTONSCTOU7;在執(zhí)行完上面七個(gè)語(yǔ)句之后,分別以不同用戶(hù)的身份登錄數(shù)據(jù)庫(kù),進(jìn)行相關(guān)操作,檢查系統(tǒng)是否許可。)U4更新Student表的學(xué)生學(xué)號(hào)。UPDATEStudentSETSNO=‘95101'WHERESNO=‘95001';2.)U7向SC表中插入一條數(shù)據(jù):(95020,20,88)。INSERTINTOSCVALUES(‘95020','20',88);(二、)回收權(quán)限。將授予的權(quán)限部分收回,檢查回收后,該用戶(hù)是否真正喪失了對(duì)數(shù)據(jù)的相應(yīng)權(quán)限。1.收回用戶(hù)U4修改學(xué)生學(xué)號(hào)的權(quán)限。(前用戶(hù)為SYSTEM,直接執(zhí)行下列語(yǔ)句:)REVOKEUPDATE(SNO)ONTABLEStudentFROMU4;收回所有用戶(hù)對(duì)表SC的查詢(xún)權(quán)限。REVOKESELECTONTABLESCFROMPUBLIC;3.收回用戶(hù)U5對(duì)SC表的INSERT權(quán)限。(將權(quán)限INSERT授予給用戶(hù)U5時(shí),允許該用戶(hù)將權(quán)限再授予給其他用戶(hù);之后,用戶(hù)U5將INSERT權(quán)限轉(zhuǎn)授給了U6,U6又將權(quán)限轉(zhuǎn)授給U7。因此,將用戶(hù)U5的INSERT權(quán)限收回的時(shí)候必須級(jí)聯(lián)收回,不然系統(tǒng)將拒絕執(zhí)行該命令:)REVOKEINSERTONTABLESCFROMU5CASCADE;(執(zhí)行該命令之后,U6從U5處獲得的權(quán)限也將被收回,U7從U6處獲得的權(quán)限也將同時(shí)被收回。)在回收權(quán)限之后驗(yàn)證用戶(hù)是否真正喪失了該權(quán)限。)用戶(hù)U3查詢(xún)表SC。(首先用戶(hù)U3重新登錄數(shù)據(jù)庫(kù)TEST。執(zhí)行命令:)SELECT*FROMSC;)用戶(hù)U6向表SC中插入一條記錄(‘95035','3',92)。INSERTINTOSCVALUES(‘95035','3',92);實(shí)驗(yàn)六SQL語(yǔ)言的DCL(完整性部分)一、學(xué)時(shí)2學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型演示、設(shè)計(jì)三、實(shí)驗(yàn)?zāi)康氖煜ねㄟ^(guò)SQL對(duì)數(shù)據(jù)進(jìn)行完整性控制,包括3類(lèi)完整性、CHECK短語(yǔ)、CONSTRAIN子句、觸發(fā)器。因?yàn)橥暾约s束絕大部分是在定義表結(jié)構(gòu)時(shí)進(jìn)行的因此可能需要多次定義表,如果表名發(fā)生重復(fù)的話(huà),可以先將舊表刪除后再建立四、需用儀器、設(shè)備p3及以上微機(jī);Windows2000/xp操作系統(tǒng);安裝了SQLServer2000/2005。五、實(shí)驗(yàn)準(zhǔn)備1.熟悉SQLServer2000工作環(huán)境;2.連接到學(xué)生-課程數(shù)據(jù)庫(kù)3.復(fù)習(xí)有關(guān)DCL語(yǔ)言3類(lèi)完整性、CHECK短語(yǔ)、CONSTRAIN子句、觸發(fā)器;六、實(shí)驗(yàn)內(nèi)容使用SQL對(duì)數(shù)據(jù)進(jìn)行完整性控制(3類(lèi)完整性、CHECK短語(yǔ)、CONSTRAIN子句、觸發(fā)器)。用實(shí)驗(yàn)證實(shí),當(dāng)操作違反了完整性約束條件時(shí),系統(tǒng)是如何處理的。七、實(shí)驗(yàn)過(guò)程(一)、實(shí)體完整性1.定義表Student,并將其中的Sno屬性定義為主碼。CREATETABLESTUDENT(SNOCHAR(7)PRIMARYKEY,SNAMECHAR(8)NOTNULL,SSEXCHAR(2),SAGESMALLINT,SDEPTCHAR(20));或者:CREATETABLESTUDENT(SNOCHAR(7),SNAMECHAR(8),SSEXCHAR(2),SAGESMALLINT,SDEPTCHAR(20),PRIMARYKEY(SNO));2.定義表SC,將其中的屬性Sno,Cno定義為主碼。CREATETABLESC(SNOCHAR(7)NOTNULL,CNOCHAR(4)NOTNULL,GRADESMALLINT,PRIMARYKEY(SNO,CNO));、參照完整性。1.定義表SC,其中Sno參照表Student的主碼Sno,Cno參照表Course的主碼Cno。CREATETABLESC(SNOCHAR(7)NOTNULL,CNOCHAR(4)NOTNULL,GRADESMALLINT,PRIMARYKEY(SNO,CNO),FOREIGNKEY(SNO)REFERENCESSTUDENT(SNO),FOREIGNKEY(CNO)REFERENCESCOURSE(CNO));、用戶(hù)定義完整性列值非空。在定義SC表時(shí),Sno、Cno和Grade屬性都不允許取空值。(在不特別聲明的情況下,非碼屬性的值是允許取空值的。)CREATETABLESC(SNOCHAR(7)N0TNULL,/*列值非空的約束NOTNULL*/CNOCHAR(4)NOTNULL,GRADESMALLINTNOTNULL);列值唯一。建立部門(mén)表DEPT,要求部門(mén)名稱(chēng)Dname取值唯一,部門(mén)編號(hào)Deptno屬性為主碼。CREATETABLEDEPT(DEPTNONUMERIC(7)PRIMARYKEY,DNAMEVARCHAR(9)UNIQUE,/*UNIQUE約束要求Dname取值唯一*/LOCATIONVARCHAR(10));CHECK短語(yǔ)指定列值應(yīng)該滿(mǎn)足的條件。定義表Student,屬性Ssex的值只允許取“男”或“女”;定義表SC,屬性Grade的值定義在0—100之間。CREATETABLESTUDENT(SNOCHAR(7)PRIMARYKEY,SNAMECHAR(8)NOTNULL,SSEXCHAR(2)CHECK(SSEXIN('男','女')),/*CHECK語(yǔ)句約束條件*/SAGESMALLINT,SDEPTCHAR(20));CREATETABLESC(SNOCHAR(7)NOTNULL,CNOCHAR(4)NOTNULL,GRADESMALLINTCHECK(GRADE>0ANDGRADEv100),/*CHECK語(yǔ)句約束條件*/PRIMARYKEY(SNO,CNO),FOREIGNKEY(SNO)REFERENCESSTUDENT(SNO),FOREIGNKEY(CNO)REFERENCESCOURSE(CNO));定義表Student,要求當(dāng)學(xué)生性別為男時(shí),其名字不能以Ms.打頭。CREATETABLESTUDENT(SNOCHAR(7)PRIMARYKEY,SNAMECHAR(8)NOTNULL,SSEXCHAR(2),SAGESMALLINT,SDEPTCHAR(20),CHECK(SSEX='女'ORSNAMENOTLIKE'Ms.%'));/*定義了Sname和Ssex之間的約束條件*/CONSTRAINT完整性約束命名子句。1.)定義表Student,要求學(xué)號(hào)在90000—99999之間,姓名不能取空值,年齡小于30,性別只能是“男”或“女”。要求全部用約束命名子句實(shí)現(xiàn)。CREATETABLESTUDENT(SNONUMERIC(5)CONSTRAINTC1CHECK(SNOBETWEEN90000AND99999),SNAMEVARCHAR(20)CONSTRAINTC2NOTNULL,SAGENUMERIC(3)CONSTRAINTC3CHECK(SAGE<30),SSEXVARCHAR(2)CONSTRAINTC4CHECK(SSEXIN(‘男',女')),CONSTRAINTStudentKeyPRIMARYKEY(SNO));)修改表Student中的完整性限制,去掉對(duì)性別的限制,并將年齡的限制由小于30改為小于40。ALTERTABLESTUDENT/*去掉對(duì)性別的限制條件C4*/DROPCONSTRAINTC4;ALTERTABLESTUDENT/*先刪掉原來(lái)的約束條件再增加一個(gè)新的約束條件*DROPCONSTRAINTC3;ALTERTABLESTUDENTADDCONSTRAINTC3CHECK(SAGE<40);、觸發(fā)器。1.定義表TAB,并在其上定義觸發(fā)器TRI,在對(duì)TAB的插入和更新前檢查,如果插入或更新的值在100-1000之間的話(huà),將值置為50;如果值大于1000的話(huà),則給出新值不允許大于1000的提示。CREATETABLEtab(colint);INSERTINTOtabVALUES(10);INSERTINTOtabVALUES(20);CREATETRIGGERtriBEFOREUPDATEORINSERTONtabFOREACHROWASBEGINIFnew.col>100ANDnew.col<1000THENnew.col:=50;ENDIF;IFnew.col>1000THENRAISEEXCEPTION‘Newvaluescannotmorethan1000';ENDIF;END;檢測(cè):1)向表TAB插入數(shù)據(jù)(150)。執(zhí)行:INSERTINTOTABVALUES(150);結(jié)果:插入的數(shù)據(jù)為150。值在100-1000之間,觸發(fā)器TRI自動(dòng)執(zhí)行,將插入的值置為50。2)對(duì)表中的數(shù)據(jù)進(jìn)行更新,將20更新為1500。執(zhí)行:UPDATETABSETCOL=1500WHERECOL=20;結(jié)果:系統(tǒng)報(bào)出'Newvaluescannotmorethan1000'的錯(cuò)誤,對(duì)表進(jìn)行查詢(xún)后發(fā)現(xiàn),表中的數(shù)據(jù)并沒(méi)有發(fā)生改變。說(shuō)明在更新數(shù)據(jù)時(shí),值大于1000則觸發(fā)觸發(fā)器TRI自動(dòng)執(zhí)行,系統(tǒng)報(bào)錯(cuò),更新無(wú)效。2.刪除觸發(fā)器TRI。DROPTRIGGERTRIONTAB;實(shí)驗(yàn)七數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)與連接操作一、學(xué)時(shí)2學(xué)時(shí)二、實(shí)驗(yàn)類(lèi)型演示、設(shè)計(jì)三、實(shí)驗(yàn)?zāi)康?、熟悉使用存儲(chǔ)過(guò)程來(lái)進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序的設(shè)計(jì)2、學(xué)會(huì)配置ODBC數(shù)據(jù)源。熟悉使用ODBC來(lái)進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序的設(shè)計(jì),熟悉通過(guò)ODBC接口訪(fǎng)問(wèn)異構(gòu)數(shù)據(jù)庫(kù)并對(duì)異構(gòu)數(shù)據(jù)庫(kù)進(jìn)行操作。四、需用儀器、設(shè)備p3及以上微機(jī);Windows2000/xp操作系統(tǒng);安裝了SQLServer2000/2005。五、實(shí)驗(yàn)準(zhǔn)備1.熟悉SQLServer2000工作環(huán)境;2.連接到學(xué)生-課程數(shù)據(jù)庫(kù)熟悉使用建立存儲(chǔ)過(guò)程命令和熟悉通過(guò)ODBC接口訪(fǎng)問(wèn)異構(gòu)數(shù)據(jù)庫(kù)六、實(shí)驗(yàn)內(nèi)容對(duì)學(xué)生課程數(shù)據(jù)庫(kù),編寫(xiě)存儲(chǔ)過(guò)程,完成下面功能:1)統(tǒng)計(jì)離散數(shù)學(xué)的成績(jī)分布情況,即按照各分?jǐn)?shù)段統(tǒng)計(jì)人數(shù);2)統(tǒng)計(jì)任意一門(mén)課的平均成績(jī)。3)將學(xué)生選課成績(jī)從百分制改為等級(jí)制(即A、B、C、D、E);4)使用ODBC編寫(xiě)應(yīng)用程序來(lái)對(duì)異構(gòu)數(shù)據(jù)庫(kù)進(jìn)行各種數(shù)據(jù)操作。七、實(shí)驗(yàn)過(guò)程在實(shí)驗(yàn)六之前,在安裝過(guò)程中自動(dòng)建立的“學(xué)生課程數(shù)據(jù)庫(kù)”中共有三張關(guān)系表StCourse和SC,登陸的用戶(hù)名為SYSTEM,密碼為MANAGER。接下來(lái)的實(shí)驗(yàn)就是對(duì)課程數(shù)據(jù)庫(kù),編寫(xiě)存儲(chǔ)過(guò)程。(一)、統(tǒng)計(jì)離散數(shù)學(xué)的成績(jī)分布情況,即按照各分?jǐn)?shù)段統(tǒng)計(jì)人數(shù)。創(chuàng)建存儲(chǔ)過(guò)程1)創(chuàng)建需要的表結(jié)構(gòu)。因?yàn)榇鎯?chǔ)過(guò)程在執(zhí)行后在客戶(hù)端并沒(méi)有返回值,因此需要建立一個(gè)表存放執(zhí)行后果,并返回到客戶(hù)端顯示。根據(jù)實(shí)驗(yàn)要求,我們要統(tǒng)計(jì)選修了離散數(shù)學(xué)的學(xué)生的成績(jī)分布,因此我們建立表其中第一列division顯示成績(jī)分段劃分,第二列number顯示的是成績(jī)?cè)谠摲謹(jǐn)?shù)段的學(xué)數(shù)。CREATETABLERank(divisionCHAR(20),numberINT);2)編寫(xiě)存儲(chǔ)過(guò)程。CREATEORREPLACEPROCEDUREstatistic_mark(nameCHAR(50))//存儲(chǔ)過(guò)程帶有一個(gè)字符型參數(shù)值,便于統(tǒng)計(jì)不同科目的分?jǐn)?shù)分布ASDECLAREless60INT:=O;〃分為五個(gè)分?jǐn)?shù)段,并置初始值為0b60a70INT:=0;b70a80INT:=0;b80a90INT:=0;more90INT:=0;curenoCHAR⑷;//設(shè)字符型變量cureno存放輸入的課程名稱(chēng)參BEGINSELECTcnoINTOcureno〃根據(jù)課程名稱(chēng)在Course表中查詢(xún)查詢(xún)?cè)撜nFROMCourseWHEREcname=name;IFNOTFOUNDTHEN//如果不存在用戶(hù)輸入的課程名稱(chēng),返回錯(cuò)誤RAISEEXCEPTION'輸入錯(cuò)誤,沒(méi)有該課程';ENDIF;SELECTcount(*)INTOless60〃查詢(xún)分?jǐn)?shù)低于60分的學(xué)生人數(shù)FROMscWHEREcno=curcnoANDgrade<60;SELECTcount(*)INTOb60a70〃查詢(xún)分?jǐn)?shù)在60到70之間的學(xué)生人數(shù)FROMscWHEREcno=curcnoANDgrade>=60ANDgrade<70;SELECTcount(*)INTOb70a80〃查詢(xún)分?jǐn)?shù)在70到80之間的學(xué)生人數(shù)FROMscWHEREcno=curcnoANDgrade>=70ANDgrade<80;SELECTcount(*)INTOb80a90〃查詢(xún)分?jǐn)?shù)在80到90之間的學(xué)生人數(shù)FROMscWHEREcno=curcnoANDgrade>=80ANDgrade<90;SELECTcount(*)INTOmore90〃查詢(xún)分?jǐn)?shù)高于90的學(xué)生人數(shù)FROMscWHEREcno=curcnoANDgrade>=90;//向表Rank中插入五條記錄,顯示成績(jī)分布情況INSERTINTORankVALUES('[0,60)',less60);INSERTINTORankVALUES('[60,70)',b60a70);INSERTINTORankVALUES('[70,80)',b70a80);INSERTINTORankVALUES('[80,90)',b80a90);INSERTINTORankVALUES('[90,100]',more90);END;執(zhí)行存儲(chǔ)過(guò)程首先執(zhí)行編寫(xiě)好的存儲(chǔ)過(guò)程statistic_mark,然后在表Rank中查看執(zhí)行結(jié)果。PERFORMPROCEDUREstatistic_mark('離散數(shù)學(xué)');SELECT*FORMRank;、統(tǒng)計(jì)任意一門(mén)課的平均成績(jī)。創(chuàng)建存儲(chǔ)過(guò)程創(chuàng)建需要的表結(jié)構(gòu)。根據(jù)實(shí)驗(yàn)要求,我們要統(tǒng)計(jì)任意一門(mén)課的平均成績(jī),因此我們建立表Avggrade,第一列cname顯示統(tǒng)計(jì)的課程名稱(chēng),第二列avgg顯示選修了該課程的學(xué)生平均成績(jī)。CREATETABLEAvggrade(cnameCHAR(50),avggNUMERIC(10,6));編寫(xiě)存儲(chǔ)過(guò)程。CREATEORREPLACEPROCEDUREcollect_avggrade()ASDECLARE//聲明變量curnameCHAR(50);curcnoCHAR(4);curavggNUMERIC(10,6);CURSORmycursorFOR//聲明游標(biāo)mycursor查詢(xún)課程號(hào)和SELECTcno,cnameFROMcourse;BEGINOPENmycursor;//打開(kāi)游標(biāo)IFmycursor%ISOPENTHEN//條件控制,游標(biāo)打開(kāi)時(shí)進(jìn)行以下處LOOP//循環(huán)控制FETCHmycursorINTOcurcno,curname;//游標(biāo)推進(jìn)一行,取結(jié)果送變EXITWHEN(mycursor%NOTFOUND);〃女口果沒(méi)有返回值則退出循環(huán)SELECTAVG(grade)INTOcuravggFROMSC//求該課程的平均值送變WHEREcno=curcno;//向Avggrade表中插入記錄,顯示課程名稱(chēng)和平均成績(jī)INSERTINTOAvggradeVALUES(curname,curavgg);ENDLOOP;//結(jié)束循環(huán)控制ENDIF;//結(jié)束條件控制CLOSEmycursor;//關(guān)閉游標(biāo)END;執(zhí)行存儲(chǔ)過(guò)程首先執(zhí)行編寫(xiě)好的存儲(chǔ)過(guò)程collect_avggrade,然后在表Avggrade中查看執(zhí)行結(jié)果PERFORMPROCEDUREcollect_avggrade();SELECT

溫馨提示

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

評(píng)論

0/150

提交評(píng)論