《實驗5 索引和視圖》由會員分享,可在線閱讀,更多相關《實驗5 索引和視圖(5頁珍藏版)》請在裝配圖網上搜索。
1、實驗5 索引和視圖
一、實驗目的
1. 學會使用企業(yè)管理器和Transact-SQL語句CREATE INDEX創(chuàng)建索引。
2. 學會使用企業(yè)管理器查看索引。
3. 學會使用企業(yè)管理器和Transact-SQL語句DROP INDEX刪除索引。
4. 掌握使用企業(yè)管理器、向導等創(chuàng)建、管理和刪除全文索引,并使用全文引索查詢信息的方法。
5. 掌握使用企業(yè)管理器和Transact-SQL語句CREATE-VIEW創(chuàng)建視圖的用法。
6. 掌握系統(tǒng)存儲過程sp
2、_rename的用法。
7. 掌握使用Transact-SQL語句ALTER VIEW修改視圖的方法。
二、實驗準備
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的用法。
三、實驗內容
0. 創(chuàng)建studentsdb數據庫及其相應表,并錄入數據。
啟動查詢分析器,運行下面鏈接的代碼即可。
創(chuàng)建數據庫代碼
1.分別使用企業(yè)管理器和Transact-SQL語句為studentsdb數據庫的student_info表格和curricul
4、um表創(chuàng)建主鍵索引。
createindexstudent_idxonstudent_info(學號)
createindexcurriculum_idxoncurriculum(課程編號)
2.使用企業(yè)管理器按curriculum表的課程編號列創(chuàng)建唯一性索引。
createuniqueindexcurri_idxoncurriculum(課程編號)
3.分別使用企業(yè)管理器和Transact-SQL語句為studentsdb數據庫的grade表的“分數”字段創(chuàng)建一個非聚集索引,命名為grade_index。
CREATE INDEX grade_index ON grade
5、(分數)
createindexgrade_indexongrade(分數)
4.為studentsdb數據庫的grade表的“學號”和“課程編號”字段創(chuàng)建一個復合唯一索引,命名為grade_id_c_ind。
CREATE UNIQUE INDEX grade_id_c_ind ON grade(學號,課程編號)
createuniqueindexgrade_id_c_indongrade(學號,課程編號)
5.分別使用企業(yè)管理器和系統(tǒng)存儲過程sp_helpindex查看grade表和student_info表上的索引信息。
sp_helpindex
6、 grade
sp_helpindexgrade
6.使用企業(yè)管理器的“向導”工具對grade表創(chuàng)建一個聚集索引和唯一索引。
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數據庫啟用全文索引。
sp_fulltext_databasestudent_info(學號)
10. 分別使用企業(yè)管理器和系統(tǒng)存儲過程sp_fulltext_catalog為studentsdb數據庫建立全文目錄,命名為FT_stu。為student_info表建立全文索引數
8、據元。
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ˊ
在建立全文索引數據元之前保證已為student_info表建立了PK_student_infl索引
9、。
11. 為student_info表設置全文索引列名為ˊ家庭住址ˊ。在全文目錄中注冊該表,激活表的全文檢索能力。
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函數通過全文目錄檢索家庭住址包含25號的記錄。
SELECT姓名,家庭住址
FROM student_info
WHERE CONTAINS(家庭住址,ˊ25號ˊ)
SELECT姓名,家庭住址
F
12、ROMstudent_info
WHERECONTAINS(家庭住址,ˊ號ˊ)
14. 使用系統(tǒng)存儲過程從studentsdb數據庫中禁用全文檢索。
15. 在studentsdb數據庫中,以student_info表為基礎,使用企業(yè)管理器建立名為v_stu_i的視圖,使視圖顯示學生姓名、性別、家庭住址。
createviewv_stu_i
as
select姓名,性別,家庭住址
fromstudent_info
16.在studentsdb數據庫中,使用Transact-SQL語句 CREATE VIEW 建立一個名為v_stu_c的視圖,
13、顯示學生的學號、姓名、所學課程的課程編號,并利用視圖查詢學號為0003的學生情況。
(1)createviewv_stu_c
as
selectstudent_info.學號,姓名,grade.課程編號
fromstudent_info,grade,curriculum
wherestudent_info.學號=grade.學號andgrade.課程編號=curriculum.課程編號
(2)select*
fromv_stu_c
where學號='0003'
17.基于student_info表、curriculum表和grade表,建立一個名為v_stu_g的視圖,
14、視圖中具有所有學生的學號、姓名、課程名稱、分數。使用視圖v_stu_g查詢學號為0001的學生的所有課程和成績,如圖1-9所示。
學號
姓名
課程名稱
分數
0001
劉衛(wèi)平
大學計算機基礎
80
0001
劉衛(wèi)平
C語言程序設計
90
0001
劉衛(wèi)平
SQL Server數據庫
87
?
0001
劉衛(wèi)平
英語
86
0001
劉衛(wèi)平
高等數學
78
圖1-9 學號為0001的學生的視圖信息
createviewv_st
15、u_g
as
selectstudent_info.學號,姓名,curriculum.課程名稱,grade.分數
fromstudent_info,grade,curriculum
wherestudent_info.學號=grade.學號andgrade.課程編號=curriculum.課程編號
select*
fromv_stu_g
18.分別使用企業(yè)管理器和Transact-SQL語句修改視圖v_stu_c,使之顯示學號、姓名、每個學生所學課程數目。
alterviewv_stu_c(課程編號)
as
selectCOUNT(課程編號)
fromgrade
g
16、roupby學號
19.使用Transact-SQL語句ALTER VIEW 修改視圖v_stu_i,使其具有列名學號、姓名、性別。
ALTER VIEW v_stu_i(學號,姓名,性別)
AS SELECT 學號,姓名,性別 FROM student_info
alterviewv_stu_i(學號,姓名,性別)
asselect學號,姓名,性別
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表添加一行數據:學號為0015、姓名為陳婷、性別為女。
insertintov_stu_info
values('0015','陳婷','女')
22.利用視圖v_stu_i刪除學號為0015的學生記錄。
deletefromv_stu_info
where學號='0015'
23.利用視圖v
_stu_g修改姓名為劉衛(wèi)平的學生的高等數學的分數為84。
updatev_stu_g
set分數='84'
where姓名='劉衛(wèi)平'and課程名稱='高等數學'
24.使用
18、Transact-SQL語句DROP VIEW 刪除視圖v_stu_c和v_stu_g。
dropviewv_stu_c,v_stu_g
四、實驗思考
1.是否可以通過視圖v_stu_g修改grade表中學號列數據?
不可以。因為學號列在表student_info中有主鍵約束,即被設為主鍵,修 改語句將因為違反主鍵約束而被終止。
2.比較通過試圖和基表操作表中數據的異同。
相同點:試圖作為一個查詢結果與基表具有相似的結構,對視圖的操作與對表的操作是一樣的,通過視圖可以完成某些和基表相同的一些數據操作,如,數據的檢索、添加。刪除和修改。
不同點:視圖是一種數據庫對象,是從一個或多個表或視圖中導出的虛擬表。視圖所對應的數據并不儲存在視圖中,而是儲存在所引用的基表中,視圖的結構和數據是對基表進行查詢的結果。