![太原理工大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告_第1頁(yè)](http://file4.renrendoc.com/view/53696609ee3f40a48af07f0de84bd97c/53696609ee3f40a48af07f0de84bd97c1.gif)
![太原理工大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告_第2頁(yè)](http://file4.renrendoc.com/view/53696609ee3f40a48af07f0de84bd97c/53696609ee3f40a48af07f0de84bd97c2.gif)
![太原理工大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告_第3頁(yè)](http://file4.renrendoc.com/view/53696609ee3f40a48af07f0de84bd97c/53696609ee3f40a48af07f0de84bd97c3.gif)
![太原理工大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告_第4頁(yè)](http://file4.renrendoc.com/view/53696609ee3f40a48af07f0de84bd97c/53696609ee3f40a48af07f0de84bd97c4.gif)
![太原理工大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告_第5頁(yè)](http://file4.renrendoc.com/view/53696609ee3f40a48af07f0de84bd97c/53696609ee3f40a48af07f0de84bd97c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
..本科實(shí)驗(yàn)報(bào)告課程名稱(chēng):數(shù)據(jù)庫(kù)系統(tǒng)概論實(shí)驗(yàn)工程:交互式SQL、數(shù)據(jù)完整性、用戶鑒別與數(shù)據(jù)控制實(shí)驗(yàn)地點(diǎn):致遠(yuǎn)樓B503專(zhuān)業(yè)班級(jí):軟件12班學(xué)號(hào):20120058學(xué)生:王者清風(fēng)指導(dǎo)教師:雪梅2014年3月18日一、實(shí)驗(yàn)?zāi)康暮鸵笫煜ねㄟ^(guò)SQL對(duì)數(shù)據(jù)庫(kù)進(jìn)展操作。二、實(shí)驗(yàn)容和原理1.在RDBMS中建立一個(gè)學(xué)生-課程數(shù)據(jù)庫(kù),進(jìn)展實(shí)驗(yàn)所要求的各種操作,所有的SQL操作均在此建立的新庫(kù)里進(jìn)展。2.根據(jù)以下要求認(rèn)真進(jìn)展實(shí)驗(yàn),記錄所有的實(shí)驗(yàn)用例及執(zhí)行結(jié)果。數(shù)據(jù)定義:根本表的創(chuàng)立、修改及刪除;索引的創(chuàng)立和刪除。數(shù)據(jù)操作:完成各類(lèi)查詢(xún)操作(單表查詢(xún),連接查詢(xún),嵌套查詢(xún),集合查詢(xún));完成各類(lèi)更新操作(插入數(shù)據(jù),修改數(shù)據(jù),刪除數(shù)據(jù))。視圖的操作:視圖的定義(創(chuàng)立和刪除),查詢(xún),更新(注意更新的條件)。主要儀器設(shè)備操作系統(tǒng):Windows7。數(shù)據(jù)庫(kù)管理系統(tǒng):SQLServer2008。四、操作方法與實(shí)驗(yàn)步驟實(shí)驗(yàn)數(shù)據(jù)記錄實(shí)驗(yàn)結(jié)果(一)數(shù)據(jù)定義:一.根本表的操作1.建立根本表1)創(chuàng)立學(xué)生表Student,由以下屬性組成:學(xué)號(hào)Sno(char型,長(zhǎng)度為9,主碼),Sname(char型,長(zhǎng)度為20,唯一),性別Ssex(char型,長(zhǎng)度為2),年齡(smallint),所在系(char型,長(zhǎng)度為20)。createtableStudent(Snochar(9)primarykey,Snamechar(20)unique,Ssexchar(2),Sagesmallint,Sdeptchar(20));2〕創(chuàng)立課程表Course,由以下屬性組成:課程號(hào)o(char型,主碼,長(zhǎng)度為4),課程名ame(char型,長(zhǎng)度為40),先行課Cpno(char型,長(zhǎng)度為4,外碼),學(xué)分Ccredit(smallint)。createtableCourse(ochar(4)primarykey,amechar(40),Cpnochar(4),Ccreditsmallint);假設(shè)設(shè)置Cpno外碼,插入數(shù)據(jù)時(shí)會(huì)提示違反外碼約束。3)創(chuàng)立學(xué)生選課表SC,由以下屬性組成:學(xué)號(hào)Sno(char型,長(zhǎng)度為9),課程號(hào)o(char型,長(zhǎng)度為4),成績(jī)Grade(smallint),其中Sno和o構(gòu)成主碼。createtablesc(Snochar(9),ochar(4),Gradesmallint,primarykey(Sno,o),foreignkey(Sno)referencesstudent(Sno),foreignkey(o)referencescourse(o));2.修改根本表:1)向Student表增加"入學(xué)時(shí)間列〞,其數(shù)據(jù)類(lèi)型為日期型。altertableStudentaddS_entrancedate;2)將年齡的數(shù)據(jù)類(lèi)型由字符型(假設(shè)原來(lái)的數(shù)據(jù)類(lèi)型是字符型)改為整數(shù)。altertableStudentaltercolumnSageint;3)增加課程名稱(chēng)必須取唯一值的約束條件。altertableCourseaddunique(ame);注意:修改表構(gòu)造后,再次查看表,注意觀察變化。3.刪除根本表:1)在所有的操作完畢后刪除Student表。droptableStudent;2)在所有的操作完畢后刪除Course表。droptableCourse;3)在所有的操作完畢后刪除SC表。droptableSC;思考:刪除表時(shí),不同的刪除順序會(huì)有不同結(jié)果,為什么??注意錯(cuò)誤提示。二.索引操作1.建立索引1)為學(xué)生—課程數(shù)據(jù)庫(kù)中的Student,Course,SC3個(gè)表建立索引。其中Student表按學(xué)號(hào)升序建唯一索引,Course表按課程號(hào)升序建唯一索引,SC表按學(xué)號(hào)升序和課程號(hào)降序建唯一索引。createuniqueindexStusnoonStudent(Sno);createuniqueindexCouoonCourse(o);createuniqueindexSoonSC(SnoASC,oDESC);2.刪除索引1)刪除Student表的Stusname索引。dropindexstudent.Stusname;已建立已建立已刪除已刪除(二)數(shù)據(jù)操作一.更新操作1,插入數(shù)據(jù)1)在Student表中插入以下數(shù)據(jù):200215121,勇,男,20,CS200215122,晨,女,19,CS200215123,王敏。女,18,MA200215125,立,男,19,ISinsertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215121','勇','男',20,'CS');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215122','晨','女',19,'CS');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215123','王敏','女',18,'MA');insertintostudent(Sno,Sname,Ssex,Sage,Sdept)values('200215125','立','男',19,'IS')2)在Course表中插入以下數(shù)據(jù):1,數(shù)據(jù)庫(kù),5,42,數(shù)學(xué),null,26,數(shù)據(jù)處理,null,24,操作系統(tǒng),6,37,PASCAL語(yǔ)言,6,45,數(shù)據(jù)構(gòu)造,7,41,數(shù)據(jù)庫(kù),5,43,信息系統(tǒng),1,4insertintocourse(o,ame,Cpno,Ccredit)values('1','數(shù)據(jù)庫(kù)','5',4);insertintocourse(o,ame,Ccredit)values('2','數(shù)學(xué)',2);insertintocourse(o,ame,Ccredit)values('6','數(shù)據(jù)處理',2);insertintocourse(o,ame,Cpno,Ccredit)values('4','操作系統(tǒng)','6',3);insertintocourse(o,ame,Cpno,Ccredit)values('7','PASCAL語(yǔ)言','6',4);insertintocourse(o,ame,Cpno,Ccredit)values('5','數(shù)據(jù)構(gòu)造','7',4);insertintocourse(o,ame,Cpno,Ccredit)values('1','數(shù)據(jù)庫(kù)','5',4);insertintocourse(o,ame,Cpno,Ccredit)values('3','信息系統(tǒng)','1',4);3)在SC表中插入以下數(shù)據(jù):200215121,1,92200215121,2,85200215121,3,88200215122,2,90200215122,3,80insertintosc(Sno,o,Grade)values('200215121','1',92);insertintosc(Sno,o,Grade)values('200215121','2',85;insertintosc(Sno,o,Grade)values('200215121','3',88);insertintosc(Sno,o,Grade)values('200215122','2',90);insertintosc(Sno,o,Grade)values('200215122','3',80);4)將一個(gè)新學(xué)生元祖(學(xué)號(hào):200215128;:冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。insertintostudent(Sno,Sname,Ssex,Sdept,Sage)values('200215128','冬','男','IS',18);〔已做〕5)將學(xué)生成民的信息插入到Student表中。insertintostudentvalues('200215126','成民','男',18,'CS');〔已做〕6)插入一條選課記錄:(‘200215128’,‘1’)。insertintosc(Sno,o)values('200215128','1');〔已做〕7)對(duì)每一個(gè)系,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫(kù)。createtableDept_age(Sdeptchar(15),Avg_agesmallint);insertintoDept_age(Sdept,Avg_age)selectSdept,avg(Sage)fromstudentgroupbySdept;2.修改數(shù)據(jù)1)將學(xué)生200215121的年齡改為22歲。updatestudentsetSage=22whereSno='200215121';2)將所有學(xué)生的年齡增加一歲。updatestudentsetSage=Sage+1;3)將計(jì)算機(jī)科學(xué)系全體學(xué)生的成績(jī)置零。updatescsetGrade=0where'CS'=(selectSdeptfromstudentwherestudent.Sno=sc.Sno);3.刪除數(shù)據(jù)1)刪除學(xué)號(hào)為200215128的學(xué)生記錄。deletefromstudentwhereSno='200215128';2)刪除所有學(xué)生的選課記錄。deletefromsc;3)刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課記錄。deletefromscwhere'CS'=(selectSdeptfromstudentwherestudent.Sno=SC.Sno);查詢(xún)操作1.單表查詢(xún)查詢(xún)?nèi)w學(xué)生的、學(xué)號(hào)、所在系。selectsno,sname,sdeptfromStudent;5)查詢(xún)?nèi)w學(xué)生的、出生年份和所在院系,要求用小寫(xiě)字母表示所有系名。selectsname,2013-sagebirth,lower(sdept)sdeptfromStudent;10)查詢(xún)年齡在20-23歲(包括20歲和23歲)之間的學(xué)生的、系別和年齡。selectsname,sdept,sagefromStudentwheresagebetween20and2312)查詢(xún)計(jì)算機(jī)科學(xué)系(CS)、數(shù)學(xué)系(MA)、和信息系(IS)學(xué)生的和性別。selectsname,ssexfromStudentwhereSdeptin('cs','ma','is')查詢(xún)所有姓的學(xué)生的、學(xué)號(hào)和性別。selectsname,Sno,ssexfromStudentwheresnamelike'%'查詢(xún)DB_Design課程的課程號(hào)和學(xué)分。selecto,Ccreditfromcoursewhereamelike'DB\_Design'escape'\';查詢(xún)計(jì)算機(jī)科學(xué)系年齡在20歲以下的學(xué)生。selectsnamefromstudentwheresdept='cs'andsage<20計(jì)算1號(hào)課程的學(xué)生平均成績(jī)。selectAVG(grade)no1fromscwhereo='1'求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)。selecto,COUNT(sno)numberfromscgroupbyo2.連接查詢(xún)1)查詢(xún)每個(gè)學(xué)生及其選修課程的情況。selectStudent.*,sc.*fromsc,Studentwheresc.Sno=Student.Sno對(duì)上個(gè)題用自然連接完成。selectstudent.Sno,Sname,Sage,Ssex,Sdept,o,Gradefromsc,Studentwheresc.Sno=Student.Sno查詢(xún)每一門(mén)課的間接先修課(即先修課的先修課)。selectfirst.o,second.cpnofromCoursefirst,Coursesecondwherefirst.Cpno=second.o查詢(xún)每個(gè)學(xué)生及其選修課程的情況,用外連接來(lái)完成selectstudent.Sno,Sname,Ssex,Sage,Sdept,o,Gradefromstudentleftouterjoinscon(student.Sno=sc.Sno);查詢(xún)選修2號(hào)課程且成績(jī)?cè)?0分以上的所有學(xué)生。selectstudent.Sno,Snamefromstudent,scwherestudent.Sno=sc.Snoandsc.o='2'andsc.Grade>90;查詢(xún)每個(gè)學(xué)生的學(xué)號(hào)、、選修的課程名及成績(jī)。selectstudent.Sno,Sname,ame,Gradefromstudent,sc,coursewherestudent.Sno=sc.Snoandsc.o=course.o;3.嵌套查詢(xún)1)查詢(xún)與"晨〞在同一個(gè)系學(xué)習(xí)的學(xué)生。selectSno,Sname,SdeptfromStudentwhereSdeptin(selectSdeptfromStudentwhereSname='晨');2)查詢(xún)選修了課程名為"信息系統(tǒng)〞的學(xué)生學(xué)號(hào)和。selectSno,SnamefromstudentwhereSnoin(selectSnofromscwhereoin(selectofromcoursewhereame='信息系統(tǒng)'));找出每個(gè)學(xué)生超過(guò)他選修課程平均成績(jī)的課程號(hào)。selectofromscxwheregrade>(selectAVG(Grade)fromscywherex.sno=y.snogroupbySno);查詢(xún)其他系中比計(jì)算機(jī)科學(xué)系某一學(xué)生年齡小的學(xué)生和年齡。selectsname,SagefromStudentwhereSage<=any(selectsagefromstudentwhereSdept='cs')andSdept<>'cs';查詢(xún)其他系中比計(jì)算機(jī)科學(xué)系所有學(xué)生年齡小的學(xué)生和年齡。selectsname,SagefromStudentwhereSage<=all(selectsagefromstudentwhereSdept='cs')andSdept<>'cs';6)查詢(xún)選修了1號(hào)課程的學(xué)生。selectSnamefromstudentwhereexists(select*fromscwhereSno=student.Snoando='1');查詢(xún)沒(méi)有選修1號(hào)課程的學(xué)生。selectSnamefromstudentwherenotexists(select*fromscwhereSno=student.Snoando='1');查詢(xún)選修了全部課程的學(xué)生。selectSnamefromstudentwherenotexists(select*fromCoursewherenotexists(select*fromscwhereSno=student.Snoando=course.o));查詢(xún)至少選修了學(xué)生200215121選修的全部課程的學(xué)生。selectdistinctSnofromscscxwherenotexists(select*fromscscywherescy.Sno='200215122'andnotexists(select*fromscsczwherescz.Sno=scx.Snoandscz.o=scx.o));4.集合查詢(xún)1)查詢(xún)計(jì)算機(jī)科學(xué)系的學(xué)生及年齡不大于19歲的學(xué)生。select*fromstudentwhereSdept='CS'unionselect*fromstudentwhereSage<=19;查詢(xún)選修了課程1或課程2的學(xué)生。selectSnofromscwhereo='1'unionselectSnofromscwhereo='2';查詢(xún)計(jì)算機(jī)科學(xué)系的學(xué)生與年齡不大于19歲的學(xué)生的交集。select*fromstudentwhereSdept='CS'intersectselect*fromstudentwhereSage<=19;查詢(xún)既選修了課程1又選修了課程2的學(xué)生。selectSnofromscwhereo='1'intersectselectSnofromscwhereo='2';查詢(xún)計(jì)算機(jī)科學(xué)系的學(xué)生與年齡不大于19歲的學(xué)生的差集。select*fromstudentwhereSdept='CS'exceptselect*fromstudentwhereSage<=19三、視圖操作1.建立視圖1)建立信息系學(xué)生的視圖。createviewIS_StudentasselectSno,Sname,SagefromstudentwhereSdept='IS';2)建立信息系學(xué)生的視圖,并要求進(jìn)展修改和插入操作時(shí)仍需保證該視圖只有信息系的學(xué)生。createviewIS_StudentasselectSno,Sname,SagefromstudentwhereSdept='IS'withcheckoption;建立信息系選修了1號(hào)課程的學(xué)生的視圖。createviewIS_S1(Sno,Sname,Grade)asselectstudent.Sno,Sname,Gradefromstudent,scwhereSdept='IS'andstudent.Sno=sc.Snoandsc.o='1';建立信息系選修了1號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生的視圖。createviewIS_S2(Sno,Sname,Grade)asselectSno,Sname,GradefromIS_S1whereGrade>=90;5)定義一個(gè)反響學(xué)生出生年份的視圖。createviewBT_S(Sno,Sname,Sbirth)asselectSno,Sname,2004-Sagefromstudent;將學(xué)生的學(xué)號(hào)及他的平均成績(jī)定義為一個(gè)視圖。createviewS_G(Sno,Gavg)asselectSno,avg(Grade)fromscgroupbySno;將Student表中所有女生記錄定義為一個(gè)視圖。createviewF_Student(F_sno,name,sex,age,dept)asselect*fromstudentwhereSsex='女';2.刪除視圖:1)刪除視圖BT_S:3.查詢(xún)視圖:1)在信息系學(xué)生的視圖中找出年齡小于20歲的學(xué)生。selectSno,SagefromIS_StudentwhereSage<=20;查詢(xún)選修了1號(hào)課程的信息系學(xué)生。selectIS_Student.Sno,SnamefromIS_Student,scwhereIS_Student.Sno=sc.Snoandsc.o='1';在S_G視圖中查詢(xún)平均成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)和平均成績(jī)。select*fromS_GwhereGavg>=80;4.更新視圖:1)將信息系學(xué)生視圖IS_Student中學(xué)號(hào)為200215125的學(xué)生改為"辰〞。updateIS_StudentsetSname='辰'whereSno='200215125';原視圖原視圖2)向信息系學(xué)生視圖IS_Student中插入一個(gè)新的學(xué)生記錄,其中學(xué)號(hào)為200215129,為新,年齡為20歲。insertintoIS_Studentvalues('200215129','新',20,'IS');刪除信息系學(xué)生視圖IS_Student中學(xué)號(hào)為200215129的記錄。deletefromIS_StudentwhereSno='200215129';一、實(shí)驗(yàn)?zāi)康暮鸵蟆?〕了解SQLSerer數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)完整性控制的根本方法〔2〕熟練掌握常用CREATE或ALTER在創(chuàng)立或修改表時(shí)設(shè)置約束〔3〕了解觸發(fā)器的機(jī)制和使用〔4〕驗(yàn)證數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)完整性控制二、實(shí)驗(yàn)容和原理結(jié)合ST數(shù)據(jù)庫(kù)中的各個(gè)表,設(shè)置相關(guān)的約束,要求包括主鍵約束、外鍵約束、唯一約束、檢查約束、非空約束等,掌握各約束的定義方法。設(shè)置一個(gè)觸發(fā)器,實(shí)現(xiàn)學(xué)生選課總學(xué)分的完整性控制,了解觸發(fā)器的工作機(jī)制。設(shè)計(jì)一些例如數(shù)據(jù),驗(yàn)證完整性檢查機(jī)制。要求包括如下方面的容:3.1使用SQL語(yǔ)句設(shè)置約束使用CREATE或ALTER語(yǔ)句完成如下的操作,包括:1.設(shè)置各表的主鍵約束2.設(shè)置相關(guān)表的外鍵3.設(shè)置相關(guān)屬性的非空約束、默認(rèn)值約束、唯一約束4.設(shè)置相關(guān)屬性的CHECK約束3.2使用觸發(fā)器創(chuàng)立一個(gè)觸發(fā)器,實(shí)現(xiàn)如下的完整性約束:當(dāng)向SC表中插入一行數(shù)據(jù)時(shí),自動(dòng)將學(xué)分累加到總學(xué)分中。記錄修改學(xué)分的操作。3.4檢查約束和觸發(fā)器分別向相關(guān)表插入假設(shè)干條記錄,檢查你設(shè)置的完整性約束是否有效:1.插入假設(shè)干條包含正確數(shù)據(jù)的記錄,檢查插入情況2.分別針對(duì)設(shè)置的各個(gè)約束,插入違反約束的數(shù)據(jù),檢查操作能否進(jìn)展3.向SC表插入假設(shè)干行數(shù)據(jù),檢查觸發(fā)器能否實(shí)現(xiàn)其數(shù)據(jù)一致性功能。三、主要儀器設(shè)備使用SQLServer數(shù)據(jù)庫(kù)管理系統(tǒng)提供的SSMS和查詢(xún)編輯器實(shí)驗(yàn)容實(shí)驗(yàn)結(jié)果與分析創(chuàng)立學(xué)生選課數(shù)據(jù)庫(kù)TEST,包括三個(gè)根本表,其中Student表保存學(xué)生根本信息,Course表保存課程信息,SC表保存學(xué)生選課信息,其構(gòu)造如下表:CREATETABLEStudent(SnoCHAR(8)PRIMARYKEY,SnameCHAR(8)NOTNULL,SsexCHAR(2)CHECK(Ssexin('男','女')),SageSMALLINT,SdeptCHAR(20),SclassCHAR(4)NOTNULL,StotalsmallintDEFAULT0);CREATETABLECourse(oCHAR(4)CONSTRAINTFK_CoursePRIMARYKEY,ameCHAR(40),CpnoCHAR(4),CcreditSMALLINT);CREATETABLESC(SnoCHAR(8)FOREIGNKEY(Sno)REFERENCESStudent(Sno),oCHAR(4),GradeSMALLINTCONSTRAINTSC_CHECKCHECK(Grade>0ANDGrade<100),PRIMARYKEY(Sno,o),CONSTRAINTFK_SCFOREIGNKEY(o)REFERENCESCourse(o));插入數(shù)據(jù)INSERTINTOstudentVALUES('20100001','勇','男',20,'CS','1001',0)INSERTINTOStudentVALUES('20100002','晨','女',19,'CS','1001',0)INSERTINTOStudentVALUES('20100021','王敏','女',18,'MA','1002',0)INSERTINTOStudentVALUES('20100031','立','男',19,'IS','1003',0)INSERTINTOStudentVALUES('20100003','洋','女',NULL,NULL,'1001',0)INSERTINTOStudentVALUES('20100010','斌','男',19,'IS','1005',0)INSERTINTOStudentVALUES('20100022','明明','男',19,'CS','1002',0)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('1','數(shù)據(jù)庫(kù)系統(tǒng)原理','5',4)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('2','高等數(shù)學(xué)',null,2)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('3','管理信息系統(tǒng)','1',4)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('4','操作系統(tǒng)原理','6',3)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('5','數(shù)據(jù)構(gòu)造','7',4)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('6','數(shù)據(jù)處理',null,2)INSERTINTOCourse(o,ame,Cpno,Ccredit)VALUES('7','C語(yǔ)言',null,4)INSERTINTOSCVALUES('20100001','1',92)INSERTINTOSCVALUES('20100001','2',85)INSERTINTOSCVALUES('20100001','3',88)INSERTINTOSCVALUES('20100002','1',90)INSERTINTOSCVALUES('20100002','2',80)INSERTINTOSCVALUES('20100003','1',null)INSERTINTOSCVALUES('201000010','3',null)修改約束對(duì)數(shù)據(jù)庫(kù)中已經(jīng)存在的表,可對(duì)其增加約束或修改已存在的約束:添加約束ALTERTABLECourseADDUNIQUE(ame)ALTERTABLECourseADDFOREIGNKEY(Cpno)REFERENCESCourse(o)掌握如何添加約束掌握如何聲明唯一約束修改約束ALTERTABLESCDROPCONSTRAINTSC_CHECKALTERTABLESCADDCONSTRAINTSC_CHECKCHECK(Grade>=0ANDGrade<=100)掌握如何修改約束理解命名約束的優(yōu)點(diǎn)二、檢查完整性約束通過(guò)修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)檢查完整性約束條件的作用。1.檢查主鍵約束〔1〕執(zhí)行下面的語(yǔ)句修改Student表,觀察語(yǔ)句能否正確運(yùn)行,解釋為什么?INSERTINTOStudentVALUES('20100101','斌','男',20,'CS','1001',0)INSERTINTOStudentVALUES('20100001','斌','男',20,'CS','1001',0)消息2627,級(jí)別14,狀態(tài)1,第1行違反了PRIMARYKEY約束'PK__Student__DDDF64467F60ED59'。不能在對(duì)象'dbo.Student'中插入重復(fù)鍵。語(yǔ)句已終止?!惨?yàn)閟no為主鍵不能有重復(fù),所以無(wú)法運(yùn)行〕UPDATEStudentSETSno='20100021'WHERESname='立'消息2627,級(jí)別14,狀態(tài)1,第1行違反了PRIMARYKEY約束'PK__Student__DDDF64467F60ED59'。不能在對(duì)象'dbo.Student'中插入重復(fù)鍵。語(yǔ)句已終止?!擦⒁薷牡膶W(xué)跟王敏的學(xué)號(hào)重復(fù)了,由于學(xué)號(hào)是學(xué)生表的主鍵,不可以重復(fù),所以無(wú)法運(yùn)行〕〔2〕執(zhí)行下面的語(yǔ)句修改SC表,觀察語(yǔ)句能否正確運(yùn)行,解釋為什么?INSERTINTOSCVALUES('20100001','1',78)INSERTINTOSCVALUES('20100001',null,78)2.檢查唯一約束執(zhí)行下面的語(yǔ)句修改Course表,觀察語(yǔ)句能否正確運(yùn)行,解釋為什么?INSERTINTOCourseVALUES('8','JAVA',7,3)INSERTINTOCourseVALUES('9','數(shù)據(jù)構(gòu)造',7,3)3.檢查默認(rèn)值、允許空值列運(yùn)行如下的語(yǔ)句:INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100102','盛','男','1008')觀察插入數(shù)據(jù)行的數(shù)值SELECT*FROMStudentWHereSno='20100102'4.檢查非空約束下面的語(yǔ)句包含空值,檢查運(yùn)行結(jié)果,解釋為什么?INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100103','盛','男',NULL)INSERTINTOStudent(Sno,Sname,Ssex)VALUES('20100104','盛','男')5.檢查CHECK約束執(zhí)行下面的語(yǔ)句,解釋其運(yùn)行結(jié)果。INSERTINTOSCVALUES('20100001','4',95)INSERTINTOSCVALUES('20100001','4',102)INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100103','盛','男','1008')INSERTINTOStudent(Sno,Sname,Ssex,Sclass)VALUES('20100104','盛','','1008')6.檢查外鍵約束〔1〕執(zhí)行下面的語(yǔ)句檢查外鍵約束的作用INSERTINTOSCVALUES('20100301','1',95)INSERTINTOSCVALUES('20100001','10',95)UPDATESCSETo='10'Whereo='1'UPDATECourseSETo='10'Whereo='3'〔2〕執(zhí)行下面的語(yǔ)句檢查對(duì)被引用表的約束Student表:DELETEStudentWHERESno='20100021'DELETEStudentWHERESno='20100001'UPDATECourseSETo='10'WHEREame='數(shù)據(jù)庫(kù)系統(tǒng)原理'三、觸發(fā)器的定義及使用1.定義觸發(fā)器〔1〕定義一個(gè)觸發(fā)器,實(shí)現(xiàn)有關(guān)學(xué)分的完整性約束:當(dāng)向SC表插入一行選課記錄時(shí),自動(dòng)將該課程的學(xué)分累加到該學(xué)生的總學(xué)分中。CREATETRIGGERtr_INSERTONSCFORINSERTAS--聲明變量DECLAREsnochar(8)DECLAREcriditintDECLAREochar(4)--提取插入的數(shù)據(jù)SELECTsno=Sno,o=oFROMinserted--提取學(xué)生的總學(xué)分SELECTcridit=CcreditFROMSCjoinCourseON(SC.o=Course.o)WHERESC.o=o--更新總學(xué)分UPDATEStudentSETStotal=Stotal+criditWHERESno=snoGO〔2〕定義一個(gè)觸發(fā)器,實(shí)現(xiàn)對(duì)SC表的操作登記:當(dāng)用戶向SC表插入或修改時(shí),記錄該操作到數(shù)據(jù)庫(kù)中。創(chuàng)立日志登記表:CREATETABLELOG_TABLE(usernamechar(10),--操作人員datedatetime,--修改時(shí)間Snochar(8),--學(xué)生學(xué)號(hào)ochar(4)--課程號(hào))創(chuàng)立日志登記觸發(fā)器:CREATETRIGGERtr_UPDATEONSCFORINSERT,UPDATEASDECLAREsnochar(8)DECLAREochar(4)DECLAREnewsmallintSELECTsno=Sno,o=oFROMinsertedINSERTINTOLOG_TABLEVALUES(CURRENT_USER,getdate(),Sno,o);GO執(zhí)行插入操作,觸發(fā)觸發(fā)器:INSERTINTOSCVALUES('20100001','6',95)驗(yàn)證觸發(fā)器是否觸發(fā)select*fromstudentselect*fromLOG_TABLE1、實(shí)驗(yàn)?zāi)康摹?〕了解SQLSerer數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)訪問(wèn)控制的根本方法〔2〕了解使用SSMS如何給用戶授權(quán)〔3〕熟練掌握常用GRANT和REVOKE進(jìn)展權(quán)限控制〔4〕驗(yàn)證數(shù)據(jù)庫(kù)系統(tǒng)的訪問(wèn)控制2、實(shí)驗(yàn)平臺(tái)使用SQLServer數(shù)據(jù)庫(kù)管理系統(tǒng)提供的SSMS。3實(shí)驗(yàn)容及要求實(shí)驗(yàn)應(yīng)包括如下方面的容:創(chuàng)立新的數(shù)據(jù)庫(kù)用戶對(duì)上一實(shí)驗(yàn)建立的表進(jìn)展權(quán)限設(shè)置檢查數(shù)據(jù)庫(kù)用戶的權(quán)限撤銷(xiāo)用戶權(quán)限4實(shí)驗(yàn)報(bào)告要求寫(xiě)出實(shí)驗(yàn)的根本過(guò)程。參考例如:在SQLServer中,對(duì)用戶訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限管理可以使用兩種方式,一種是使用SSMS的圖形界面進(jìn)展管理,一種是使用SQL語(yǔ)句。3.1使用SSMS的圖形界面創(chuàng)立用戶并授權(quán)創(chuàng)立一個(gè)數(shù)據(jù)庫(kù)用戶:明,授予他可以查詢(xún)Student表的權(quán)限。1.使用SSMS的圖形界面創(chuàng)立登錄名在快捷菜單中選擇"新建登錄名〞:進(jìn)入"登錄名〞窗口,輸入登錄信息:明123456782.使用SSMS的圖形界面創(chuàng)立數(shù)據(jù)庫(kù)用戶選擇"ST〞數(shù)據(jù)庫(kù),在快捷菜單中選擇"新建登錄名〞:3.使用SSMS的圖形界面進(jìn)展授權(quán),設(shè)置用戶對(duì)對(duì)象的訪問(wèn)權(quán)限展開(kāi)ST數(shù)據(jù)庫(kù)的"平安性〞下的"用戶〞,選擇"明db〞。翻開(kāi)用戶屬性窗口:3.2使用SQL語(yǔ)句創(chuàng)立用戶并授權(quán)在ST或TEST數(shù)據(jù)庫(kù)中,使用SQL語(yǔ)句創(chuàng)立兩個(gè)數(shù)據(jù)庫(kù)用戶,對(duì)數(shù)據(jù)庫(kù)中的Student、SC、和Course表,分別對(duì)其授予不同的訪問(wèn)權(quán)限,如下表。表3.1授予用戶權(quán)限1.創(chuàng)立登錄名用戶要訪
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口貿(mào)易合同
- 轉(zhuǎn)讓摩托車(chē)轉(zhuǎn)讓合同
- 承包合同續(xù)簽申請(qǐng)書(shū)
- 中國(guó)戲曲學(xué)院《大學(xué)數(shù)學(xué)Ⅱ微積分》2023-2024學(xué)年第二學(xué)期期末試卷
- 小型裝飾裝修工程施工合同范本
- 云南文化藝術(shù)職業(yè)學(xué)院《經(jīng)濟(jì)數(shù)學(xué)(2)》2023-2024學(xué)年第二學(xué)期期末試卷
- 出租車(chē)司機(jī)聘用合同范本
- 甘肅衛(wèi)生職業(yè)學(xué)院《數(shù)學(xué)課堂教學(xué)技能訓(xùn)練與評(píng)價(jià)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南文理學(xué)院芙蓉學(xué)院《數(shù)學(xué)教學(xué)技能訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 學(xué)校物業(yè)管理服務(wù)合同范本模板
- 2024年長(zhǎng)沙衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 河北省滄州市五縣聯(lián)考2024-2025學(xué)年高一上學(xué)期期末英語(yǔ)試卷(含答案含含聽(tīng)力原文無(wú)音頻)
- 福建省泉州市南安市2024-2025學(xué)年九年級(jí)上學(xué)期期末考試語(yǔ)文試題(無(wú)答案)
- 腫瘤護(hù)士培訓(xùn)課件
- 新課標(biāo)體育與健康水平二教案合集
- 2025屆高考語(yǔ)文一輪復(fù)習(xí)知識(shí)清單:古代詩(shī)歌鑒賞
- 醫(yī)療器材申請(qǐng)物價(jià)流程
- 我的消防文員職業(yè)規(guī)劃
- 2025年公司品質(zhì)部部門(mén)工作計(jì)劃
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫(kù)
- 華為研發(fā)部門(mén)績(jī)效考核制度及方案
評(píng)論
0/150
提交評(píng)論