《實(shí)驗(yàn)5 索引和視圖》由會員分享,可在線閱讀,更多相關(guān)《實(shí)驗(yàn)5 索引和視圖(5頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、實(shí)驗(yàn)5 索引和視圖
一、實(shí)驗(yàn)?zāi)康?
1. 學(xué)會使用企業(yè)管理器和Transact-SQL語句CREATE INDEX創(chuàng)建索引。
2. 學(xué)會使用企業(yè)管理器查看索引。
3. 學(xué)會使用企業(yè)管理器和Transact-SQL語句DROP INDEX刪除索引。
4. 掌握使用企業(yè)管理器、向?qū)У葎?chuàng)建、管理和刪除全文索引,并使用全文引索查詢信息的方法。
5. 掌握使用企業(yè)管理器和Transact-SQL語句CREATE-VIEW創(chuàng)建視圖的用法。
6. 掌握系統(tǒng)存儲過程sp
2、_rename的用法。
7. 掌握使用Transact-SQL語句ALTER VIEW修改視圖的方法。
二、實(shí)驗(yàn)準(zhǔn)備
1. 了解聚集索引和非聚集索引的概念。
2. 了解使用Transact-SQL語句CREATE INDEX創(chuàng)建索引的語法。
3. 了解使用企業(yè)管理器創(chuàng)建索引的步驟。
4. 了解Transact-SQL語句DROP INDEX刪除索引的用法。
5. 了解創(chuàng)建視圖的Transact-SQL語句CREATE INDEX的語法格式及用法。
6.
3、 了解修改視圖的Transact-SQL語句ALTER VIEW的語法格式。
7. 了解視圖更名的系統(tǒng)存儲過程sp_rename的用法。
8. 了解刪除視圖的Transact-SQL語句DROP VIEW的用法。
三、實(shí)驗(yàn)內(nèi)容
0. 創(chuàng)建studentsdb數(shù)據(jù)庫及其相應(yīng)表,并錄入數(shù)據(jù)。
啟動(dòng)查詢分析器,運(yùn)行下面鏈接的代碼即可。
創(chuàng)建數(shù)據(jù)庫代碼
1.分別使用企業(yè)管理器和Transact-SQL語句為studentsdb數(shù)據(jù)庫的student_info表格和curricul
4、um表創(chuàng)建主鍵索引。
createindexstudent_idxonstudent_info(學(xué)號)
createindexcurriculum_idxoncurriculum(課程編號)
2.使用企業(yè)管理器按curriculum表的課程編號列創(chuàng)建唯一性索引。
createuniqueindexcurri_idxoncurriculum(課程編號)
3.分別使用企業(yè)管理器和Transact-SQL語句為studentsdb數(shù)據(jù)庫的grade表的“分?jǐn)?shù)”字段創(chuàng)建一個(gè)非聚集索引,命名為grade_index。
CREATE INDEX grade_index ON grade
5、(分?jǐn)?shù))
createindexgrade_indexongrade(分?jǐn)?shù))
4.為studentsdb數(shù)據(jù)庫的grade表的“學(xué)號”和“課程編號”字段創(chuàng)建一個(gè)復(fù)合唯一索引,命名為grade_id_c_ind。
CREATE UNIQUE INDEX grade_id_c_ind ON grade(學(xué)號,課程編號)
createuniqueindexgrade_id_c_indongrade(學(xué)號,課程編號)
5.分別使用企業(yè)管理器和系統(tǒng)存儲過程sp_helpindex查看grade表和student_info表上的索引信息。
sp_helpindex
6、 grade
sp_helpindexgrade
6.使用企業(yè)管理器的“向?qū)А惫ぞ邔rade表創(chuàng)建一個(gè)聚集索引和唯一索引。
7.使用系統(tǒng)存儲過程sp_rename將引索grade_index更名為grade_ind。
sp_rename ˊgrade.grade_indexˊ,ˊgrade_indˊ, ˊINDEXˊ
sp_rename'grade.grade_index','grade_ind','index'
8. 分別使用企業(yè)管理器和Transact-SQL語句DROP INDEX刪除索引grade_ind。
再次使用系統(tǒng)存
7、儲過程sp_helpindex查看grade表上的索引信息。
DROP INDEX grade.grade_ind
dropindexgrade.grade_ind
9. 分別使用企業(yè)管理器和系統(tǒng)存儲過程sp_fulltext_database為studentsdb數(shù)據(jù)庫啟用全文索引。
sp_fulltext_databasestudent_info(學(xué)號)
10. 分別使用企業(yè)管理器和系統(tǒng)存儲過程sp_fulltext_catalog為studentsdb數(shù)據(jù)庫建立全文目錄,命名為FT_stu。為student_info表建立全文索引數(shù)
8、據(jù)元。
sp_fulltext_catalog'FT_stu','create'
sp_fulltext_table'student_info','create','FT_stu','PK_student_info'
execute sp_fulltext_catalog ˊFT_stuˊ,ˊcreateˊ
exec sp_fulltext_tableˊstudent_infoˊ,ˊcreateˊ,ˊFT_stuˊ,ˊPK_student_infoˊ
在建立全文索引數(shù)據(jù)元之前保證已為student_info表建立了PK_student_infl索引
9、。
11. 為student_info表設(shè)置全文索引列名為ˊ家庭住址ˊ。在全文目錄中注冊該表,激活表的全文檢索能力。
execute sp_fulltext_columnˊstudent_infoˊ,ˊ家庭住址ˊ,ˊaddˊ
execute sp_fulltext_tableˊstudent_infoˊ,ˊactivateˊ
executesp_fulltext_columnˊstudent_infoˊ,ˊ家庭住址ˊ,ˊaddˊ
executesp_fulltext_tableˊstudent_infoˊ,ˊactivateˊ
12
10、. 填充全文目錄,檢查全文目錄填充情況。
execute sp_fulltext_catalog ˊFT_stuˊ,ˊstart_fullˊ
While (fulltextcatalogproperty(ˊFT_stuˊ,ˊpopulateStatusˊ)<>0)
BEGIN
waitfor delayˊ0;0;30ˊ--如果全文目錄正處于填充狀態(tài),則等待30s后再檢測一次
END
executesp_fulltext_catalogˊFT_stuˊ,ˊstart_fullˊ
While (f
11、ulltextcatalogproperty(ˊFT_stuˊ,ˊpopulateStatusˊ)<>0)
BEGIN
waitfordelayˊ;0;30ˊ--如果全文目錄正處于填充狀態(tài),則等待s后再檢測一次
END
13. 在student_info表中,分別使用CONTAINS和FREETEXT函數(shù)通過全文目錄檢索家庭住址包含25號的記錄。
SELECT姓名,家庭住址
FROM student_info
WHERE CONTAINS(家庭住址,ˊ25號ˊ)
SELECT姓名,家庭住址
F
12、ROMstudent_info
WHERECONTAINS(家庭住址,ˊ號ˊ)
14. 使用系統(tǒng)存儲過程從studentsdb數(shù)據(jù)庫中禁用全文檢索。
15. 在studentsdb數(shù)據(jù)庫中,以student_info表為基礎(chǔ),使用企業(yè)管理器建立名為v_stu_i的視圖,使視圖顯示學(xué)生姓名、性別、家庭住址。
createviewv_stu_i
as
select姓名,性別,家庭住址
fromstudent_info
16.在studentsdb數(shù)據(jù)庫中,使用Transact-SQL語句 CREATE VIEW 建立一個(gè)名為v_stu_c的視圖,
13、顯示學(xué)生的學(xué)號、姓名、所學(xué)課程的課程編號,并利用視圖查詢學(xué)號為0003的學(xué)生情況。
(1)createviewv_stu_c
as
selectstudent_info.學(xué)號,姓名,grade.課程編號
fromstudent_info,grade,curriculum
wherestudent_info.學(xué)號=grade.學(xué)號andgrade.課程編號=curriculum.課程編號
(2)select*
fromv_stu_c
where學(xué)號='0003'
17.基于student_info表、curriculum表和grade表,建立一個(gè)名為v_stu_g的視圖,
14、視圖中具有所有學(xué)生的學(xué)號、姓名、課程名稱、分?jǐn)?shù)。使用視圖v_stu_g查詢學(xué)號為0001的學(xué)生的所有課程和成績,如圖1-9所示。
學(xué)號
姓名
課程名稱
分?jǐn)?shù)
0001
劉衛(wèi)平
大學(xué)計(jì)算機(jī)基礎(chǔ)
80
0001
劉衛(wèi)平
C語言程序設(shè)計(jì)
90
0001
劉衛(wèi)平
SQL Server數(shù)據(jù)庫
87
?
0001
劉衛(wèi)平
英語
86
0001
劉衛(wèi)平
高等數(shù)學(xué)
78
圖1-9 學(xué)號為0001的學(xué)生的視圖信息
createviewv_st
15、u_g
as
selectstudent_info.學(xué)號,姓名,curriculum.課程名稱,grade.分?jǐn)?shù)
fromstudent_info,grade,curriculum
wherestudent_info.學(xué)號=grade.學(xué)號andgrade.課程編號=curriculum.課程編號
select*
fromv_stu_g
18.分別使用企業(yè)管理器和Transact-SQL語句修改視圖v_stu_c,使之顯示學(xué)號、姓名、每個(gè)學(xué)生所學(xué)課程數(shù)目。
alterviewv_stu_c(課程編號)
as
selectCOUNT(課程編號)
fromgrade
g
16、roupby學(xué)號
19.使用Transact-SQL語句ALTER VIEW 修改視圖v_stu_i,使其具有列名學(xué)號、姓名、性別。
ALTER VIEW v_stu_i(學(xué)號,姓名,性別)
AS SELECT 學(xué)號,姓名,性別 FROM student_info
alterviewv_stu_i(學(xué)號,姓名,性別)
asselect學(xué)號,姓名,性別
fromstudent_info
20.使用系統(tǒng)存儲過程sp_rename將視圖v_stu_i更名為v_stu_info。
sp_rename v_stu_i,v_stu_info
sp_rename
17、v_stu_i,v_stu_info
21.利用視圖v_stu_i為student_info表添加一行數(shù)據(jù):學(xué)號為0015、姓名為陳婷、性別為女。
insertintov_stu_info
values('0015','陳婷','女')
22.利用視圖v_stu_i刪除學(xué)號為0015的學(xué)生記錄。
deletefromv_stu_info
where學(xué)號='0015'
23.利用視圖v
_stu_g修改姓名為劉衛(wèi)平的學(xué)生的高等數(shù)學(xué)的分?jǐn)?shù)為84。
updatev_stu_g
set分?jǐn)?shù)='84'
where姓名='劉衛(wèi)平'and課程名稱='高等數(shù)學(xué)'
24.使用
18、Transact-SQL語句DROP VIEW 刪除視圖v_stu_c和v_stu_g。
dropviewv_stu_c,v_stu_g
四、實(shí)驗(yàn)思考
1.是否可以通過視圖v_stu_g修改grade表中學(xué)號列數(shù)據(jù)?
不可以。因?yàn)閷W(xué)號列在表student_info中有主鍵約束,即被設(shè)為主鍵,修 改語句將因?yàn)檫`反主鍵約束而被終止。
2.比較通過試圖和基表操作表中數(shù)據(jù)的異同。
相同點(diǎn):試圖作為一個(gè)查詢結(jié)果與基表具有相似的結(jié)構(gòu),對視圖的操作與對表的操作是一樣的,通過視圖可以完成某些和基表相同的一些數(shù)據(jù)操作,如,數(shù)據(jù)的檢索、添加。刪除和修改。
不同點(diǎn):視圖是一種數(shù)據(jù)庫對象,是從一個(gè)或多個(gè)表或視圖中導(dǎo)出的虛擬表。視圖所對應(yīng)的數(shù)據(jù)并不儲存在視圖中,而是儲存在所引用的基表中,視圖的結(jié)構(gòu)和數(shù)據(jù)是對基表進(jìn)行查詢的結(jié)果。