




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗1、數(shù)據(jù)定義1.1 實驗目的熟悉SQL的數(shù)據(jù)定義語言,能夠熟練地使用SQL語句來創(chuàng)建和更改基本表,創(chuàng)建和取消索引。1.2 實驗內(nèi)容l 用企業(yè)管理器創(chuàng)建數(shù)據(jù)庫University_Misl 使用CREATE語句創(chuàng)建基本表。l 更改基本表的定義: 增加列,刪除列,修改列的數(shù)據(jù)類型。l 創(chuàng)建表的升、降序索引。l 刪除基本表的約束、基本表的索引或基本表。1.3 實驗步驟(1) 用企業(yè)管理器創(chuàng)建數(shù)據(jù)庫University_Mis(2) 在查詢分析器中用SQL語句創(chuàng)建關系數(shù)據(jù)庫基本表:學生表Students(Sno,Sname, Semail,Scredit,Sroom);教師表Teachers(Tn
2、o,Tname,Temail,Tsalary);課程表Courses(Cno,Cname,Ccredit);成績表Reports(Sno,Tno,Cno, Score);其中:Sno、Tno、Cno分別是表Students、表Teachers、表Courses的主鍵,具有唯一性約束,Scredit具有約束“大于等于0”; Reports中的Sno,Tno,Cno是外鍵,它們共同組成Reports的主鍵。(3) 更改表Students:增加屬性Ssex(類型是CHAR,長度為2),取消Scredit“大于等于0”約束。把表Courses中的屬性Cname的數(shù)據(jù)類型改成長度為30。(4) 刪除表S
3、tudents的一個屬性Sroom。(5) 刪除表Reports。(6) 為Courses表創(chuàng)建按Cno降序排列的索引。(7) 為Students表創(chuàng)建按Sno升序排列的索引。(8) 創(chuàng)建表Students的按Sname升序排列的唯一性索引。(9) 刪除Students表Sno的升序索引。實驗2、SQL的數(shù)據(jù)查詢2.1 實驗目的熟悉SQL語句的數(shù)據(jù)查詢語言,能夠SQL語句對數(shù)據(jù)庫進行單表查詢、連接查詢、嵌套查詢、集合查詢和統(tǒng)計查詢。2.2 實驗內(nèi)容實驗內(nèi)容主要是對數(shù)據(jù)庫進行查詢操作,包括如下四類查詢方式:(1) 單表查詢l 查詢的目標表達式為所有列、指定的列或指定的列的運算三種不同。l 使用D
4、ISTINCT保留字消除重復行。l 對查詢結果排序和分組。l 集合分組使用集函數(shù)進行各項統(tǒng)計。(2) 連接查詢l 笛卡兒連接和等值連接。l 自連接。l 外連接l 復合條件連接。l 多表連接。(3) 嵌套查詢l 通過實驗驗證對子查詢的兩個限制條件。l 體會相關子查詢和不相關子查詢的不同。l 考察四類謂詞的用法,包括:第一類,IN、NOT IN;第二類,帶有比較運算符的子查詢;第三類,SOME、ANY或ALL謂詞的子查詢,查詢最大值和最小值;第四類,帶有EXISTS謂詞的子查詢,實現(xiàn)“所有”等情況(如王宏的“所有”課程,“所有”女生選修的課程)(4) 集合運算l 使用保留字UNION進行集合或運算
5、。l 采用邏輯運算符AND或OR來實現(xiàn)集合交和減運算。2.3 實驗步驟以University_Mis數(shù)據(jù)庫為例,該數(shù)據(jù)庫中有四張如實驗1,其中Score是每門課的考試成績,Scredit是學生所有考試合格課程所獲得的積分總數(shù),Ccredit每門課程的學分數(shù)。在數(shù)據(jù)庫中,存在這樣的聯(lián)系:學生可以選擇課程,一個課程對應一個教師。在表Reports中保存學生的選課記錄和考試成績。請先輸入如下符合條件的元組后,再對數(shù)據(jù)庫進行有關的查詢操作: 圖1.1、Students表 圖1.2、Teachers表 圖1.3、Courses表 圖1.4、Reports表(1) 查詢性別為“男”的所有學生的名稱并按學號
6、升序排列。SELECT Sname FROM StudentsWHERE Ssex = 男ORDER BY Sno ASC;(2) 查詢學生的選課成績合格的課程成績,并把成績換算為積分。積分的計算公式為:1+(考試成績-60)*0.1*Ccredit??荚嚦煽?60 否則=0 SELECT Sno,Score,Credits, (1+(Score-60)*0.1)*Credits score FROM Reports,CoursesWHERE Score = 60(3) 查詢學分是3或4的課程的名稱。 SELECT CnameFROM CoursesWHERE Credits = 3 OR C
7、redits = 4;(4) 查詢所有課程名稱中含有“算法”的課程編號。SELECT CnoFROM CoursesWHERE Cname LIKE %算法%;(5) 查詢所有選課記錄的課程號(不重復顯示)。 SELECT CnoFROM ReportsWHERE Score != 0GROUP BY Cno(6) 統(tǒng)計所有老師的平均工資。SELECT AVG(Tsalary)FROM Teachers(7) 查詢所有教師的編號及選修其課程的學生的平均成績,按平均成績降序排列。 SELECT Tno,AVG(Score)FROM ReportsGROUP BY TnoORDER BY AVG(
8、Score) DESC(8) 統(tǒng)計各個課程的選課人數(shù)和平均成績。 SELECT Cno,COUNT(Sno) number,AVG(Score)FROM ReportsGROUP BY Cno(9) 查詢至少選修了三門課程的學生編號和姓名。 SELECT Sno,SnameFROM StudentsWhere Sno IN(SELECT SnoFROM ReportsGROUP BY SnoHAVING COUNT(*)=3)(10) 查詢編號S26的學生所選的全部課程的課程名和成績。 SELECT Sno,Score,CnameFROM Reports,CoursesWhere Sno LI
9、KE S26 AND Courses.Cno = Reports.Cno (11) 查詢所有選了“數(shù)據(jù)庫原理及其應用”課程的學生編號和姓名。 SELECT Students.Sno,SnameFROM Courses,Students,ReportsWhere Cname LIKE 數(shù)據(jù)庫原理與其應用% AND Courses.Cno = Reports.Cno AND Reports.Sno = Students.Sno(12) 求出選擇了同一個課程的學生對。 SELECT A.Cno,A.Sno,B.SnoFROM Reports A , Reports BWhere A.Cno = B.
10、Cno AND A.Sno != B.SnoORDER BY Cno(13) 求出至少被兩名學生選修的課程編號。(14) 查詢選修了編號S26的學生所選的某個課程的學生編號。(15) 查詢學生的基本信息及選修課程編號和成績。(16) 查詢學號S52的學生的姓名和選修的課程名稱及成績。(17) 查詢和學號S52的學生同性別的所有學生資料。(18) 查詢所有選課的學生的詳細信息。(19) 查詢沒有學生選的課程的編號和名稱。(20) 查詢選修了課程名為C+的學生學號和姓名。(21) 找出選修課程UML或者課程C+的學生學號和姓名。(22) 找出和課程UML或課程C+的學分一樣課程名稱。(23) 查詢
11、所有選修編號C01的課程的學生的姓名。(24) 查詢選修了所有課程的學生姓名。(25) 利用集合查詢方式,查詢選修課程C+或選擇課程JAVA的學生的編號、姓名和積分。(26) 實現(xiàn)集合交運算,查詢既選修課程C+又選修課程JAVA的學生的編號、姓名和積分。(27) 實現(xiàn)集合減運算,查詢選修課程C+而沒有選修課程JAVA的學生的編號。實驗3、數(shù)據(jù)更新3.1 實驗目的熟悉數(shù)據(jù)庫的數(shù)據(jù)更新操作,能夠使用SQL語句對數(shù)據(jù)庫進行數(shù)據(jù)的插入、更新、刪除操作。3.2 實驗內(nèi)容l 在本實驗中,主要內(nèi)容是如何用SQL語句對數(shù)據(jù)進行更新。l 使用INSERT INTO語句插入數(shù)據(jù),包括插入一個元組或將子查詢的結果插
12、入到數(shù)據(jù)庫中兩種方式。l 使用SELECT INTO語句,產(chǎn)生一個新表并插入數(shù)據(jù)。l 使用UPDATE語句可以修改指定表中滿足WHERE子句條件的元組,有三種修改的方式:修改某一個元組的值;修改多個元組的值;帶子查詢地修改語句。l 使用DELETE語句刪除數(shù)據(jù):刪除某一個元組的值;刪除多個元組的值;帶子查詢地刪除語句。3.3 實驗步驟在數(shù)據(jù)庫University_Mis上按下列要求進行數(shù)據(jù)更新。(1) 使用SQL語句向Students表中插入元組(Sno:S78; Sname:李迪; Semail:LD; Scredit:0;Ssex:男)。(2) 對每個課程,求學生的選
13、課人數(shù)和學生的平均成績,并把結果存入數(shù)據(jù)庫。使用SELECT INTO 和INSERT INTO 兩種方法實現(xiàn)。(3) 在Students表中使用SQL語句將姓名為李迪的學生的學號改為S70。(4) 在Teachers表中使用SQL語句將所有教師的工資加500元。(5) 將姓名為劉華的學生的課程“數(shù)據(jù)庫原理及其應用”的成績加上6分。(6) 在Students表中使用SQL語句刪除姓名為李迪的學生信息。(7) 刪除所有選修課程JAVA的選修課記錄。(8) 對Courses表做刪去學分=4的元組操作,討論該操作所受到的約束。實驗4、SQL的視圖4.1 實驗目的熟悉SQL支持的有關視圖的操作,能夠熟
14、練使用SQL語句來創(chuàng)建需要的視圖,對視圖進行查詢和取消視圖。4.2 實驗內(nèi)容(1) 定義常見的視圖形式,包括:l 行列子集視圖l WITH CHECK OPTION的視圖l 基于多個基表的視圖l 基于視圖的視圖l 帶表達式的視圖l 分組視圖(2) 通過實驗考察WITH CHECK OPTION這一語句在視圖定義后產(chǎn)生的影響,包括對修改操作、刪除操作、插入操作的影響。(3) 討論視圖的數(shù)據(jù)更新情況,對子行列視圖進行數(shù)據(jù)更新。(4) 使用DROP語句刪除一個視圖,由該視圖導出的其他視圖定義仍在數(shù)據(jù)字典中,但已不能使用,必須顯式刪除。同樣的原因,刪除基表時,由該基表導出的所有視圖定義都必須顯式刪除。
15、4.3 實驗步驟(1) 創(chuàng)建一個行列子集視圖CS_View,給出選課成績合格的學生的編號、教師編號、所選課程號和該課程成績。(2) 創(chuàng)建基于多個基本表的視圖SCT_View,這個視圖由學生姓名和他所選修的課程名及講授該課程的教師姓名構成。(3) 創(chuàng)建帶表達式的視圖EXP_View,由學生姓名及所選課程名和所有課程成績都比原來多5分這幾個屬性組成。(4) 創(chuàng)建分組視圖Group_View,將學生的學號及他的平均成績定義為一個視圖。(5) 創(chuàng)建一個基于視圖的視圖,基于(1)中建立的視圖,定義一個包括學生編號、學生所選課程數(shù)目和平均成績的視圖VV_View。(6) 查詢所有選修課程“數(shù)據(jù)庫原理及其應
16、用”的學生姓名。(7) 插入元組(S52,T02,C02,59)到視圖CS_View中。若是在視圖的定義中存在WITH CHECK OPTION字句對插入操作由什么影響。(8) 將視圖CS_View(包括定義WITH CHECK OPTION)中,所有課程編號為C01的課程的成績都減去5分。這個操作數(shù)據(jù)庫是否會正確執(zhí)行,為什么?如果加上5分(原來95分以上的不變)呢?(9) 在視圖CS_View(包括定義WITH CHECK OPTION)刪除編號S03學生的記錄,會產(chǎn)生什么結果?(10) 取消視圖SCT_View和視圖CS_View實驗5、數(shù)據(jù)控制5.1 實驗目的熟悉SQL的數(shù)據(jù)控制功能,能
17、夠使用SQL語句來向用戶授予和收回權限。5.2 實驗內(nèi)容(1) 使用GRANT語句來對用戶授權,對單個用戶或多個用戶授權,或使用保留字PUBLIC對所有用戶授權。對不同的操作對象包括數(shù)據(jù)庫、視圖、基本表等進行不同權限的授權。(2) 使用WITH GRANT OPTION字句授予用戶傳播該權限的權利。(3) 當在授權時發(fā)生循環(huán)授權,考察DBS能否發(fā)現(xiàn)這個錯誤。如果不能,結合取消權限操作,查看DBS對循環(huán)授權的控制。(4) 使用REVOKE子句收回授權,取消授權的級聯(lián)反應。5.3 實驗步驟用企業(yè)管理器在數(shù)據(jù)庫University_Mis中建立三個用戶USER1、USER2和USER3,他們在數(shù)據(jù)庫
18、中的角色是PUBLIC。請按以下要求,分別以管理員身份或這三個用戶的身份登陸到數(shù)據(jù)庫中,進行操作,并記錄操作結果。配置管理器服務第一個重新啟動(1) 授予所有用戶對表Courses的查詢權限。這是以windows登錄SQL: GRANT SELECTON CoursesTO PUBLIC以USER1的身份登陸查詢分析器,用SQL語言查詢Courses和Students表,查詢結果如何?SELECT *FROM Courses查詢Courses正常,查詢表Stuents出錯,由于為將表Students的查詢權限授予用戶USER1.(2) 授予用戶USER1對表Students插入和更新的權限,但
19、不授予刪除權限,并且授予用戶USER1傳播這兩個權限的權利。GRANT SELECT,INSERT,UPDATEON StudentsTO USER1WITH GRANT OPTION(若不授予用戶USER1 SELECT權限登錄時將無法UPDATE)以USER?的身。INSERTINTO StudentsVALUES(S05,葛曉凡,GXF,18.6,女)UPDATE StudentsSET Scredit = 19.2WHERE Sno = S05(3) 允許用戶USER2在表Reports中插入元組,更新Score列,可以查詢除了Sno以外的所有列。GRANT IN
20、SERT,UPDATE(Score),SELECT(Tno,Cno,Score)ON ReportsTO USER2以USER?的身。INSERTINTO ReportsVALUES(S05,T02,C01,85)UPDATE ReportsSET Score = 90WHERE Tno = T01SELECT Tno,Cno,ScoreFROM Reports(4) 用戶USER1授予用戶USER2對表Students插入和更新的權限,并且授予用戶USER2傳播插入操作的權利。GRANT SELECT,INSERT,UPDATEON StudentsTO USER2(傳播插入操作不會)以US
21、ER?的身。INSERTINTO StudentsVALUES(S06,陳慧,CH,19.6,女)UPDATE StudentsSET Scredit = 20.1WHERE Sno = S06(5) 收回對用戶USER1對表Courses查詢權限的授權。REVOKE SELECTON CoursesFROM USER1以USER?的身。明明收回權限為什么還可以查詢?(6) 由上面(2)和(4)的授權,再由用戶USER2對用戶USER3授予表Students插入和更新的權限,并且授予用戶USER3傳播插入操作的權力。這時候,如果由USER3對USER1授予表Student
22、s的插入和更新權限是否能得到成功?如果能夠成功,那么如果有用戶USER2取消USER3的權限,對USER1會有什么影響?如果再由DBA取消USER1的權限,對USER2有什么影響?實驗6、SQL的空值和空集處理6.1 實驗目的認識NULL值在數(shù)據(jù)庫中的特殊含義,了解空值和空集對于數(shù)據(jù)庫的數(shù)據(jù)查詢操作,特別是空值在條件表達式中與其他的算術運算符或者邏輯運算符的運算中,空集作為嵌套查詢的子查詢的返回結果時候的特殊性,能夠熟練使用SQL語句來進行與空值,空集相關的操作。6.2 實驗內(nèi)容通過實驗驗證在原理解析中分析過的SQL Server對NULL的處理,包括:l 在查詢的目標表達式中包含空值的運算。
23、l 在查詢條件中空值與比較運算符的運算結果。l 使用IS NULL或IS NOT NULL 來判斷元組該列是否為空值。l 對存在取空值的列按值進行ORDER BY排序。l 使用保留字DISTINCT對空值的處理,區(qū)分數(shù)據(jù)庫的多中取值與現(xiàn)實中的多種取值的不同。l 使用 GROUP BY對存在取空值的屬性值進行分組。l 結合分組考察空值對各個集合函數(shù)的影響,特別注意對COUNT(*)和COUNT(列名)的不同影響。l 考察結果集是空集時,各個集函數(shù)的處理情況。l 驗證嵌套查詢中返回空集的情況下與各個謂詞的運算結果。l 進行與空值有關的等值連接運算。6.3 實驗步驟(1) 查詢所有選課記錄的成績并將
24、它換算為五分制(滿分為5分,合格為3分),注意,創(chuàng)建表時允許Score取NULL值。(2) 通過查詢選修編號C07的課程的學生的人數(shù),其中成績合格的學生人數(shù),不合格的人數(shù),討論NULL值的特殊含義。(3) 通過實驗檢驗在使用ORDER BY進行排序時,取NULL的項是否出現(xiàn)在結果中?如果有,在什么位置?(4) 在上面的查詢的過程中如果加上保留字DISTINCT會有什么效果呢?(5) 通過實驗說明使用分組GROUP BY對取值為NULL的項的處理。(6) 結合分組,使用集合函數(shù)求每個同學的平均分、總的選課記錄、最高成績、最低成績和總成績。(7) 查詢成績小于0的選課記錄,統(tǒng)計總數(shù)、平均分、最大值
25、和最小值。(8) 采用嵌套查詢的方式,利用比較運算符和謂詞ALL的結合來查詢表Courses中最少的學分。假設數(shù)據(jù)庫中只有一個記錄的時候,使用前面的方法會得到什么結果,為什么?(9) 創(chuàng)建一個學生表S(No,Sno,Sname),教師表T(No,Tno,Tname)作為實驗用的表。其中,No分別是這兩個表的主鍵,其他鍵允許為空。(10) 向S插入元組(n1,S01,李迪)、(n2,S02,李嵐)、(n3,S05,NULL)、(n4,S04,關紅);(11) 向T插入元組(n1,T09,李迪)、(n2,T08,李蘭)、(n3,T01,NULL)、(n4,T02,NULL)。(12) 對這兩個表作
26、對姓名的等值連接運算,找出既是老師又是學生的人員的學生編號和教師編號。實驗7、實體完整性7.1 試驗目的學習實體完整性的建立,以及實踐違反實體完整性的結果。7.2 試驗內(nèi)容(1) 在數(shù)據(jù)庫University_Mis中建立表Stu_Union,進行主鍵約束,在沒有違反實體完整性的前提下插入并更新一條記錄。(2) 演示違反實體完整性的插入操作。(3) 演示違反實體完整性的更新操作。(4) 演示事務的處理,包括事務的建立、處理以及出錯時的事務回滾。(5) 通過建立University_Misarship表,插入數(shù)據(jù),演示當與現(xiàn)有的數(shù)據(jù)環(huán)境不等時,無法建立實體完整性以及參照完整性。7.3 實驗步驟以
27、系統(tǒng)管理員或sa用戶登錄進入查詢分析器,在查詢分析器窗口中輸入如下命令,運行并觀察和記錄結果。(1) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Stu_Union(Sno CHAR(8) NOT NULL UNIQUE ,Sname CHAR(8),Ssex CHAR(1),Sage INT,Sdept CHAR(20),CONSTRAINT PK_Stu_Union PRIMARY KEY(Sno);INSERT Stu_Union VALUES(S01,王兵,M,23,CS);UPDATE Stu_Union SET Sno= WHER
28、E Sdept=CS;UPDATE Stu_Union SET Sno=S02 WHERE Sname=王兵;SELECT * FROM Stu_union; (2) 在查詢分析器中輸入如下SQL語句:USE University_MisINSERT Stu_Union VALUES (S02,黃山,M,23,CS);消息2627,級別14,狀態(tài)1,第2 行違反了PRIMARY KEY 約束PK_Stu_Union。不能在對象dbo.Stu_Union 中插入重復鍵。(3) 在查詢分析器中輸入如下SQL語句:USE University_MisUPDATE Stu_Union SET Sno
29、=NULL WHERE Sno=S02;不能將值NULL 插入列Sno,表University_Mis.dbo.Stu_Union;列不允許有Null 值。UPDATE 失敗。(4) 在查詢分析器中輸入如下SQL語句:USE University_MisSET XACT_ABORT ONBEGIN TRANSACTION T1INSERT INTO Stu_union VALUES(S09,李永,M,25,EE);INSERT INTO Stu_union VALUES (S03,黃浩,F,25,EE);INSERT INTO Stu_union VALUES (S05,黃浩,F,25,EE)
30、;SELECT * FROM Stu_union;COMMIT TRANSACTION T1 在查詢分析器中輸入如下SQL語句:USE University_MisSET XACT_ABORT ONBEGIN TRANSACTION T2INSERT INTO Stu_union VALUES (S07,李寧,M,25,EE);SELECT * FROM Stu_union;INSERT INTO Stu_union VALUES (S09,李靖,F,22,CS);COMMIT TRANSACTION T2消息2627,級別14,狀態(tài)1,第6 行違反了PRIMARY KEY 約束PK_Stu_
31、Union。不能在對象dbo.Stu_Union 中插入重復鍵。 在查詢分析器中輸入如下SQL語句:USE University_MisSELECT * FROM Stu_union;(5) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Scholarship(M_ID VARCHAR(10), Stu_id CHAR(8),R_Money INT)INSERT INTO Scholarship VALUES(M01,S07,5000)INSERT INTO Scholarship VALUES (M01,S08,8000)SELECT * F
32、ROM Scholarship 在查詢分析器中輸入如下SQL語句:USE University_MisALTER TABLE Scholarship ADDCONSTRAINT PK_Scholarship PRIMARY KEY(M_ID)消息8111,級別16,狀態(tài)1,第2 行無法在表Scholarship 中可為Null 的列上定義PRIMARY KEY 約束。消息1750,級別16,狀態(tài)0,第2 行無法創(chuàng)建約束。請參閱前面的錯誤消息。 在查詢分析器中輸入如下SQL語句:USE University_MisALTER TABLE Scholarship ADDCONSTRAINT FK_
33、Scholarship FOREIGN KEY(Stu_id) REFERENCES Students(Sno)消息1753,級別16,狀態(tài)0,第2 行列Students.Sno 的長度或小數(shù)位數(shù)與外鍵FK_Scholarship 中的引用列Scholarship.Stu_id 的長度或小數(shù)位數(shù)不同。參與構造外鍵關系的列必須定義為具有同一長度和小數(shù)位數(shù)。消息1750,級別16,狀態(tài)0,第2 行無法創(chuàng)建約束。請參閱前面的錯誤消息。實驗8、參照完整性8.1 實驗目的學習建立外鍵,以及利用FOREIGN KEYREFERENCES子句以及各種約束保證參照完整性。8.2 實驗內(nèi)容(1) 為演示參照完整
34、性,建立表Course,令Cno為其主鍵,并在Stu_Union中插入數(shù)據(jù)。為下面的實驗步驟做預先準備。(2) 建立表SC,令Sno和Cno分別為參照Stu_Union表以及Course表的外鍵,設定為級聯(lián)刪除,并令(Sno,Cno)為其主鍵。在不違反參照完整性的前提下,插入數(shù)據(jù)。(3) 演示違反參照完整性的插入數(shù)據(jù)。(4) 在Stu_Union中刪除數(shù)據(jù),演示級聯(lián)刪除。(5) 在Course中刪除數(shù)據(jù),演示級聯(lián)刪除。(6) 為了演示多重級聯(lián)刪除,建立Stu_Card表,令Stu_id為參數(shù)Stu_Union表的外鍵,令Card_id為其主鍵,并插入數(shù)據(jù)。(7) 為了演示多重級聯(lián)刪除,建立IC
35、BC_Card表,令Stu_card_id為參數(shù)Stu_Union表的外鍵,令Card_id為其主鍵,并插入數(shù)據(jù)。(8) 通過刪除Students表中的一條記錄,演示三個表的多重級聯(lián)刪除。(9) 演示事務中進行多重級聯(lián)刪除失敗的處理。修改ICBC_Card表的外鍵屬性,使其變?yōu)镺n delete No action,演示事務中通過刪除Students表中的一條記錄,多重級聯(lián)刪除失敗,整個事務回滾到事務的初始狀態(tài)。(10) 演示互參考問題及其解決方法。要建立教師授課和課程指定教師聽課關系的兩張表,規(guī)定一個教師可以授多門課,但是每個課程只能指定一個教師去聽課,所以要為兩張表建立相互之間的參照關系。
36、8.3 實驗步驟以系統(tǒng)管理員或sa賬號登錄查詢分析器,在查詢分析器窗體中輸入如下命令,運行并觀察和記錄結果。(1) 在查詢分析器中輸入如下SQL語句:USE University_MisINSERT Stu_Union Values(S01,李用,0,24,FF)SELECT * FROM Stu_Union;CREATE TABLE Course(Cno CHAR(4) NOT NULL UNIQUE,Cname VARCHAR(50) NOT NULL,Cpoints INT,CONSTRAINT PK PRIMARY KEY(Cno);INSERT Course VALUES(C01,C
37、omputerNetworks,2);INSERT Course VALUES(C02,ArtificialIntelligence,3);(2) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE Table SC(Sno CHAR(8),/ 列Stu_Union.Sno 的長度或小數(shù)位數(shù)與外鍵FK_SC_Sno 中的引用列SC.Sno 的長度或小數(shù)位數(shù)不同。參與構造外鍵關系的列必須定義為具有同一長度和小數(shù)位數(shù)。Cno CHAR(4),Scredit INT,CONSTRAINT PK_SC PRIMARY KEY(Sno,Cno),CONSTRAINT FK
38、_SC_Sno FOREIGN KEY(Sno) REFERENCES Stu_Union (Sno) ON DELETE CASCADE,CONSTRAINT FK_SC_Cno FOREIGN KEY(Cno) REFERENCES Course (Cno) ON DELETE CASCADE);INSERT INTO SC VALUES(S02,C01,2);INSERT INTO SC VALUES (S02,C02,2);INSERT INTO SC VALUES (S01,C01,2);INSERT INTO SC VALUES (S01,C02,2);SELECT * FROM
39、SC;(3) 在查詢分析器中輸入如下SQL語句:USE University_MisINSERT INTO SC VALUES(S99,C99,2);消息547,級別16,狀態(tài)0,第2 行INSERT 語句與FOREIGN KEY 約束FK_SC_Sno沖突。該沖突發(fā)生于數(shù)據(jù)庫University_Mis,表dbo.Stu_Union, column Sno。(4) 在查詢分析器中輸入如下SQL語句:USE University_MisDELETE FROM Stu_Union WHERE Sno=S01;SELECT * FROM SC;(5) 在查詢分析器中輸入如下SQL語句:USE Un
40、iversity_MisDELETE FROM Course WHERE Cno=C02;SELECT * FROM SC;(6) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Stu_Card(Card_id CHAR(14),Sno CHAR(5),Remained_money DECIMAL(10,2),Constraint PK_Stu_Card PRIMARY KEY(Card_id), Constraint FK_Stu_Card_Sno FOREIGN KEY(Sno) REFERENCES Students(Sno) ON DE
41、LETE CASCADE )INSERT INTO Stu_Card VALUES(,S03,400.25);INSERT INTO Stu_Card VALUES(,S02,600.50);SELECT * FROM Stu_card;(7) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE ICBC_Card(Bank_id CHAR(20),Stu_card_id CHAR(14),Restored_money DECIMAL(10,2),constraint PK_ICBC_Card PRIMARY KEY(Bank_id), constr
42、aint FK_ICBC_Card_Stu_id FOREIGN KEY(Stu_card_id) REFERENCES Stu_card(card_id) ON DELETE CASCADE)INSERT INTO ICBC_Card VALUES(12,15000.1);INSERT INTO ICBC_Card VALUES(45,50000.3);SELECT * FROM ICBC_Card;(8) 在查詢分析器中輸入如下SQL語句:USE University_MisALTER TABLE Reports ADDCONSTRAINT FK_Reports_Students FORE
43、IGN KEY(Sno) REFERENCES dbo.Students (Sno) ON DELETE CASCADE; DELETE FROM Students WHERE Sno=S03;SELECT * FROM Stu_card;SELECT * FROM ICBC_Card;(9) 在查詢分析器中輸入如下SQL語句:ALTER TABLE ICBC_CardDROP CONSTRAINT FK_ICBC_Card_Stu_id;ALTER TABLE ICBC_CardADD CONSTRAINT FK_ICBC_Card_Stu_id FOREIGN KEY (Stu_card_
44、id)REFERENCES Stu_card(Card_id) ON DELETE NO ACTION;在查詢分析器中輸入如下SQL語句:Begin Transaction DelDELETE FROM Stu_Card WHERE Card_id =;SELECT * FROM Stu_card;SELECT * FROM ICBC_card;Commit Transaction Del消息547,級別16,狀態(tài)0,第2 行DELETE 語句與REFERENCE 約束FK_ICBC_Card_Stu_id沖突。該沖突發(fā)生于數(shù)據(jù)庫University_Mis,表dbo.ICBC_Card, c
45、olumn Stu_card_id。在查詢分析器中輸入如下SQL語句:USE University_MisSELECT * FROM Stu_card;SELECT * FROM ICBC_card;(10) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Listen_course(Tno CHAR(6),Tname VARCHAR(20),Cno CHAR(4)CONSTRAINT PK_listen_course PRIMARY KEY(Tno)CONSTRAINT FK_listen_course FOREIGN KEY(Cno)REFE
46、RENCES Teach_course(Cno)CREATE TABLE Teach_course(Cno CHAR(4),Cname VARCHAR(30),Tno CHAR(6)CONSTRAINT PK_Teach_course PRIMARY KEY(Cno)CONSTRAINT FK_Teach_course FOREIGN KEY(Tno)REFERENCES Listen_course(Tno)消息1767,級別16,狀態(tài)0,第2 行外鍵FK_listen_course 引用了無效的表Teach_course。消息1750,級別16,狀態(tài)0,第2 行無法創(chuàng)建約束。請參閱前面的錯誤
47、消息。在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Listen_course(Tno CHAR(6),Tname VARCHAR(20),Cno CHAR(4)CONSTRAINT PK_listen_Course PRIMARY KEY(Tno)在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Teach_course(Cno CHAR(4),Cname VARCHAR(30),Tno CHAR(6)CONSTRAINT PK_teach_course PRIMARY KEY(Cno)CONST
48、RAINT FK_teach_course FOREIGN KEY(Tno)REFERENCES Listen_course(Tno)ALTER TABLE Listen_course ADD CONSTRAINT FK_listen_course FOREIGN KEY(Cno)REFERENCES Teach_course(Cno); 實驗9. 用戶自定義完整性9.1 實驗目的學習用戶自定義約束,并實踐用戶自定義完整性,利用SQL查詢分析器用短語NOT NULL、UNIQUE、CHECK保證用戶定義完整性。9.2 實驗內(nèi)容(建議將表改成Teachers,相應屬性以T開始命名,如Tname)
49、建立Teacher表。建立表Teacher,注意跟前面所建立的Teacher區(qū)分開來,(1) 創(chuàng)建Worker,Teacher表,并自定義2個約束U1以及U2,其中U1規(guī)定Wname Tname字段唯一,U2規(guī)定Wage, Tage (級別)字段的上限是28。(2) 在Worker, Teacher表中插入一條合法記錄。(3) 演示插入違反U2約束的例子,U2規(guī)定元組的Wage,Tage屬性的值必須=28。(4) 去除U2約束。(5) 重新插入(3)中想要插入的數(shù)據(jù),由于去除了U2約束,所以插入成功。(6) 創(chuàng)建規(guī)則Rule_sex,規(guī)定插入或更新的值只能是M或F,并綁定到Worker Teacher的Wsex Tsex字段。(7) 演示違反規(guī)則Rule_sex的插入操作。9.3 實驗步驟以系統(tǒng)管理員或sa帳號登錄查詢分析器,在查詢分析器窗體下輸入如下命令,運行并觀察結果。(1) 在查詢分析器中輸入如下SQL語句:USE University_MisCREATE TABLE Teacher(Tn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項羽兒童美術教案課件
- 項目介紹課件
- 音頻技術課件
- GB6783-2024食品安全國家標準食品添加劑明膠
- 城市污水管網(wǎng)建設工程商業(yè)計劃書(參考模板)
- 2025年電子車輛秤項目發(fā)展計劃
- 2025年出版物發(fā)行零售項目建議書
- 2025年油罐計量系統(tǒng)項目合作計劃書
- 搏擊俱樂部營銷方案
- 2025年醫(yī)用核素設備項目合作計劃書
- 八年級上冊美術-4《用色彩表達情感》【課件】
- NBT 35095-2017 水電工程小流域水文計算規(guī)范
- 高考英語688高頻詞匯excel版
- 賓館布草洗滌培訓課件
- 精餾塔設計方案及流程
- (正式版)JBT 2603-2024 電動懸掛起重機
- (多應用場合版)光伏組件外貿(mào)購銷合同-2024
- 兒童口腔科出科技能考試評分表
- 高標準農(nóng)田建設項目工程概算編制規(guī)程
- 消防工程監(jiān)理實施細則
- 《羽毛球裁判培訓》課件
評論
0/150
提交評論