數(shù)據(jù)庫實驗報告- 數(shù)據(jù)完整性
《數(shù)據(jù)庫實驗報告- 數(shù)據(jù)完整性》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫實驗報告- 數(shù)據(jù)完整性(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)據(jù)庫技術(shù)與應(yīng)用實驗 實驗6 數(shù)據(jù)完整性 實驗6 數(shù)據(jù)完整性 一、實驗?zāi)康? 1.掌握Transact-SQL語句(CREATE RULE、DROP RULE)創(chuàng)建和刪除規(guī)則的方法。 2.掌握系統(tǒng)存儲過程sp_bindrule、sp_unbindrule綁定和解除綁定規(guī)則的操作方法,以及sp_help、sp_helptext查詢規(guī)則信息、sp_rename更名規(guī)則的方法。 3.掌握Transact-SQL語句(CREATE DEFAULT、DRO
2、PDEFAULT)創(chuàng)建和刪除默認(rèn)對象的方法。 4.掌握系統(tǒng)存儲過程sp_bindefault、sp_unbindefault綁定和解除綁定默認(rèn)對象的操作方法,以及sp_helptext查詢規(guī)則信息。 5.掌握SQL Server管理平臺和Transact-SQL語句(CREATE TABLE、ALTER TABLE)定義和刪除約束的方法,并了解約束的類型。 二、實驗內(nèi)容和步驟 1.為studentsdb數(shù)據(jù)庫創(chuàng)建一個規(guī)則,限制所輸入的數(shù)據(jù)為7位0~9的數(shù)字。 (1)復(fù)制學(xué)生表命名為stu_phone,在stu_phone表中插入一列,列名為“電話號碼”。完成以下代碼實
3、現(xiàn)該操作。 SELECT * INTO stu_phone FROM 學(xué)生表 ALTER TABLE stu_phone ADD 電話號碼 CHAR(7)NULL stu_phone表結(jié)構(gòu)如圖1-10所示。 圖1-10 stu_phone表結(jié)構(gòu) SELECT * INTO stu_phone FROM 學(xué)生表 ALTER TABLE stu_phone ADD 電話號碼CHAR(7)NULL (2)創(chuàng)建一個規(guī)則phone_rule,限制所輸入的數(shù)據(jù)為7位0~9的數(shù)字。 CREATE rule phone_r
4、ule AS @電話號碼LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 檢驗: 電話號碼為8位時無法插入! 電話號碼為7位時可以插入! (3)使用系統(tǒng)存儲過程sp_hndrule將phone_rule規(guī)則綁定到stu_phone表的“電話號碼”列上。 sp_hndrule phone_rule , ‘stu_phone.電話號碼’ (4)插入操作輸入以下數(shù)據(jù): 學(xué)號 姓名 電話號碼 0009 王國強(qiáng) 1234yyy 是否可以成果插入?如果出現(xiàn)錯誤,請列出錯誤信息,為
5、什么會產(chǎn)生該出錯信息?如果要實現(xiàn)插入操作,應(yīng)修改INSERT INTO語句中的哪個值?phone_rule規(guī)則能否對其他操作(如DELETE)進(jìn)行規(guī)則檢查? INSERT INTO stu_phone(學(xué)號,姓名,電話號碼) VALUES('0009','王國強(qiáng)','1234yyy') 錯誤信息:消息513,級別16,狀態(tài)0,第1 行 列的插入或更新與先前的CREATE RULE 語句所指定的規(guī)則發(fā)生沖突。該語句已終止。沖突發(fā)生于數(shù)據(jù)庫'studentsdb',表'dbo.stu_phone',列'電話號碼'。 語句已終止。 修改后: INSERT INTO stu_p
6、hone(學(xué)號,姓名,電話號碼) VALUES('0009','王國強(qiáng)','1234yyy') phone_rule規(guī)則能否對其他操作(如DELETE)進(jìn)行規(guī)則檢查? 可以 2.創(chuàng)建一個規(guī)則stusex_rule,將其綁定到stu_phone表的“性別”列上,保證輸入的性別值只能是“男”或“女”。 CREATE rule stusex_rule AS @性別in ('男','女') sp_bindrule stusex_rule , 'stu_phone.性別' 3.使用系統(tǒng)存儲過程sp_help查詢stusex_rule
7、規(guī)則列表,使用sp_helptext查詢stusex_rule規(guī)則的文本,使用sp_rename將stusex_rule規(guī)則更名為stu_s_rule。 sp_help stusex_rule sp_helptext stusex_rule sp_rename stusex_rule,stu_s_rule 4.刪除stu_s_rule規(guī)則。 先解除綁定:sp_unbindrule stu_s_rule, 'stu_phone.性別' 再刪除規(guī)則:drop rule stu_s_rule 注意:stu_s_ rule為stusex_ rule更名后規(guī)則名,是
8、否仍然綁定在stu_phone表的“性別”列上,應(yīng)如何操作才能刪除它。 5.在studentdb數(shù)據(jù)庫中,建立日期、貨幣和字符等數(shù)據(jù)類型的默認(rèn)對象。 (1)創(chuàng)建默認(rèn)對象df_date、df_char、df_money。 l 創(chuàng)建日期型默認(rèn)對象df_date,默認(rèn)日期為2006-4-12。 l 創(chuàng)建字符型默認(rèn)對象df_char,默認(rèn)字符為“unknown” l 創(chuàng)建貨幣型默認(rèn)對象df_money,默認(rèn)為100元 CREATE DEFAULT df_date AS '2009-4-12' GO CREATE DEFAULT df_char AS
9、'unknown' GO CREATE DEFAULT df_money AS $100 GO (2)在studentsdb數(shù)據(jù)庫中創(chuàng)建stu_fee數(shù)據(jù)表。 學(xué)號 char(10) NOT NULL 姓名 char(8) NOT NULL, 學(xué)費(fèi) money 交費(fèi)日期 datetime 電話號碼 char(7) 表stu_fee的數(shù)據(jù)結(jié)構(gòu)如圖1-11所示。 學(xué)號 姓名 性別 交費(fèi)日期 電話號碼 圖l-11 stu_fee的數(shù)據(jù)結(jié)構(gòu) CREATE TABL
10、E stu_fee (學(xué)號char(10) NOT NULL, 姓名char()NOT NULL, 學(xué)費(fèi)money, 交費(fèi)日期datetime, 電話號碼char()) (3)使用系統(tǒng)存儲過程sp_bindefault將默認(rèn)對象df_date、df_char、df_money分別綁定在stu_fee表的“學(xué)費(fèi)”、“交費(fèi)日期”、“電話號碼”列上。 sp_bindefault df_money,'stu_fee.學(xué)費(fèi)' GO sp_bindefault df_date,'stu_fee.交費(fèi)日期' GO sp_bindefault df_char,'s
11、tu_fee.電話號碼' GO (4) 輸入命令,在stu_fee表進(jìn)行插入操作: (學(xué)號,姓名) values ('0001',’劉衛(wèi)平’) (學(xué)號,姓名,學(xué)費(fèi)) values ('0001',’張衛(wèi)民’,$120) (學(xué)號,姓名,學(xué)費(fèi),交費(fèi)日期) values ('0001',‘馬東‘,$110,’2006-5-12‘) 分析stu_fee表中插入記錄的各列的值是什么? INSERT INTO stu_fee(學(xué)號,姓名) VALUES('0001','劉衛(wèi)平') INSERT INTO stu_fee(學(xué)號,姓名,學(xué)費(fèi))VALUES('0001','張衛(wèi)民
12、',$120) INSERT INTO stu_fee(學(xué)號,姓名,學(xué)費(fèi),交費(fèi)日期) VALUES('0001','馬東',$110,'2006-5-12') 各列值為: 劉衛(wèi)平,張衛(wèi)民的交費(fèi)日期為默認(rèn)值 (5)完成以下代碼解除默認(rèn)對象df_char、df_date、df_money的綁定,并刪除之。 sp_unbindefault 'stu_fee.電話號碼' DROP DEFAULT df_char sp_unbindefault 'stu_fee.交費(fèi)日期' DROP DEFAULT df_date sp_unbindefault 'st
13、u_fee.學(xué)費(fèi)' DROP DEFAULT df_money 6.為學(xué)生表添加一列,命名為“院系”,創(chuàng)建一個默認(rèn)對象stu_d_df,將其綁定到學(xué)生表的“院系”列上,使其默認(rèn)值為“信息院”,對學(xué)生表進(jìn)行插入操作,操作完成后,刪除該默認(rèn)對象。 SELECT * FROM 學(xué)生表 ALTER TABLE 學(xué)生表ADD 院系CHAR(8) NULL CREATE DEFAULT stu_d_df AS '信息院' sp_bindefault stu_d_df,'學(xué)生表.院系' INSERT INTO 學(xué)生表(學(xué)號,姓名) VALUES('3244','郭冰驊')
14、 sp_unbindefault '學(xué)生表.院系' DROP DEFAULT stu_d_df 7.在studentsdb數(shù)據(jù)庫中用CREATE TABLE語句創(chuàng)建表stu_con,并同時創(chuàng)建約束。 (1)創(chuàng)建表的同時創(chuàng)建約束。表結(jié)構(gòu)如圖1-12所示。 圖1-12 要創(chuàng)建的表的結(jié)構(gòu) 約束要求如下: ①將學(xué)號設(shè)置為主鍵(PRIMARY KEY),主鍵名為pk_sid。 ②為姓名添加唯一約束(UNIQUE),約束名為uk_name。 ③為性別添加默認(rèn)約束(DEFAULT),默認(rèn)名稱為df
15、_sex,其值為“男” ④為出生日期添加屬性值約束(CHECK),約束名為ck_bday,其檢查條件為:出生日期>'1988-1-1’。 (2)在stu_con表中插入如表1-1所示的數(shù)據(jù)記錄。 表1-1 在stu_con表中插入的數(shù)據(jù) 學(xué)號 姓名 性別 出生日期 家庭住址 0009 張小東 1989-4-6 0010 李梅 男 1983-8-5 0011 王強(qiáng) 1988-9-10 0012 王強(qiáng) 1989-6-3 分析各約束在插入記錄時所起
16、的作用,查看插入記錄后表中數(shù)據(jù)與所插入的數(shù)據(jù)是否一致? CREATE TABLE stu_con (學(xué)號char(4) NOT NULL CONSTRAINT pk_sid PRIMARY KEY , 姓名char(8) NOT NULL CONSTRAINT uk_name UNIQUE, 學(xué)費(fèi)money, 性別char(2) CONSTRAINT df_sex DEFAULT ('男'), 出生日期datetime CONSTRAINT ck_bday CHECK (出生日期>'1988-1-1'), 家庭住址char(50)) INSERT INT
17、O stu_con(學(xué)號,姓名,出生日期) VALUES('0009','張小東','1989-4-6') INSERT INTO stu_con(學(xué)號,姓名,性別,出生日期)VALUES('0010','李梅','男','1983-8-5') INSERT INTO stu_con(學(xué)號,姓名,出生日期) VALUES('0011','王強(qiáng)','1988-9-10') INSERT INTO stu_con(學(xué)號,姓名,出生日期) VALUES('0012','王強(qiáng)','1989-6-3') 運(yùn)行結(jié)果: (1 行受影響) 消息547,級別16,狀態(tài)0,第2 行 INSERT
18、 語句與CHECK 約束"ck_bday"沖突。該沖突發(fā)生于數(shù)據(jù)庫"studentsdb",表"dbo.stu_con", column '出生日期'。 語句已終止。 (1 行受影響) 消息2627,級別14,狀態(tài)1,第4 行 違反了UNIQUE KEY 約束'uk_name'。不能在對象'dbo.stu_con' 中插入重復(fù)鍵。 語句已終止。 (3)使用ALTER TABLE語句的DROP CONSTRAINT參數(shù)項在查詢分析器中刪除為stu_con表所建的約束。 ALTER TABLE stu_con DROP CONSTRAINT pk_sid ALTER
19、TABLE stu_con DROP CONSTRAINT uk_name ALTER TABLE stu_con DROP CONSTRAINT df_sex ALTER TABLE stu_con DROP CONSTRAINT ck_bday 8.用SQL Server管理平臺完成實驗內(nèi)容7的所有設(shè)置。 出現(xiàn)問題!只能出現(xiàn)張小東的信息 9. 在查詢分析器中,為studentsdb數(shù)據(jù)庫的成績表添加外鍵約束(FOREIGN KEY),要求將“學(xué)號”設(shè)置為外鍵,參照表為學(xué)生表,外鍵名稱為fk_sid。 ALTER TABLE 成績表 A
20、DD CONSTRAINT fk_sid FOREIGN KEY(學(xué)號) references 學(xué)生表(學(xué)號) 注意:學(xué)生表里的學(xué)號一定要與成績表中的學(xué)號對應(yīng),否則會報錯沖突 ⑴使用系統(tǒng)存儲過程sp_help查看grade表的外鍵信息。 sp_help 成績表 ⑵在成績表中插入表1-2所示記錄,觀察SQLServer會做何處理,為什么?如何解決所產(chǎn)生的問題? 表1-2 學(xué)號 課程編號 分?jǐn)?shù) 0100 0001 78 INSERT INTO 成績表(學(xué)號,課程編號,分?jǐn)?shù)) VALUES('0010','0001','78') 出現(xiàn)問題: 消息54
21、7,級別16,狀態(tài)0,第2 行 INSERT 語句與FOREIGN KEY 約束"fk_sid"沖突。該沖突發(fā)生于數(shù)據(jù)庫"studentsdb",表"dbo.學(xué)生表", column '學(xué)號'。 語句已終止。 解決問題:在學(xué)生表中先插入一個學(xué)號為0010的學(xué)生信息 ⑶使用查詢分析器刪除成績表的外鍵fk_sid。 ALTER table 成績表 DROP CONSTRAINT fk_sid 四、實驗思考 1.在SQLServer 2005中,可采用哪些方法實現(xiàn)數(shù)據(jù)完整性? 答:數(shù)據(jù)類型、主鍵、外鍵、默認(rèn)值、約束與規(guī)則 2,比較默認(rèn)對象和默認(rèn)約束的異同。 答:相同點: 默認(rèn)對象與默認(rèn)約束功能相似。默認(rèn)值可以在沒有指定具體數(shù)據(jù)的列中自動插入數(shù)據(jù)。默認(rèn)約束是通過定義列的默認(rèn)值或使用數(shù)據(jù)庫的默認(rèn)值對象綁定表的列,以確保在沒有為某列指定數(shù)據(jù)時,來指定列的值。每列只能有一個默認(rèn)約束一個默認(rèn)值 不同點: 默認(rèn)對象與CREAT TABLE 和ALTER TABLE語句一起使用,而默認(rèn)約束只能用于INSERT語句。 3.在數(shù)據(jù)庫中建立的規(guī)則不綁定到到數(shù)據(jù)表的字段上會起作用嗎?為什么? 答:不會規(guī)則僅僅只是一個存在與數(shù)據(jù)庫中的對象,并未發(fā)生作用。 14 南京師范大學(xué)中北學(xué)院
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新人教版小學(xué)數(shù)學(xué)二年級下冊《總復(fù)習(xí)圖形的運(yùn)動》ppt課件
- 鉆石小鳥電子商務(wù)案例分析x
- 貴州專版201x中考語文復(fù)習(xí)第二輪古詩文閱讀專題十文言文閱讀專項訓(xùn)練二課外古詩詞賞析課件
- 計算機(jī)發(fā)展簡史
- 五年級最小公倍數(shù)
- 分?jǐn)?shù)除法應(yīng)用題(一)1
- 人教版小學(xué)科學(xué)三年級《空氣占據(jù)空間嗎》
- 腹腔鏡脾切除技巧探討
- 水下溷凝土的灌注
- 主題班會關(guān)注小環(huán)境共享大健康
- 章引言數(shù)字圖像處理
- 學(xué)情通報會二課件
- 醫(yī)療企業(yè)組織氣氛建設(shè)方案分析
- 數(shù)據(jù)中心供配電系統(tǒng)概述
- 小學(xué)三年級口算題卡課件