【SQL】基礎實驗5——視圖、規則和索引

 

一、實驗目的

1、掌握視圖的創建、修改和刪除操作

2、掌握規則的創建、綁定、解除和刪除操作

3、掌握索引的創建、修改和刪除操作

 

二、實驗內容、方法、步驟和實驗結果與分析【結果情況,碰到什麼問題,如何解決的?】

(一)視圖

實驗內容:

1.創建視圖view1,使該視圖中包含HrSystem數據庫中的一個員工的明確信息(視圖中的列名全部使用中文)。

方法:

Use HrSystem

GO

CREATE VIEW view1

AS

SELECT e.Emp_id AS 員工編號,e.Emp_name AS 姓名,e.Sex AS 性別,e.Title AS 職位,e.Wage AS 工資,e.IdCard AS 身份證號,

d.Dep_id AS 部門編號,d.Dep_name AS 部門姓名 FROM Employeese INNER JOIN Departments d

ON e.Dep_id=d.Dep_id

GO

步驟及結果:

分析:使用CREATE VIEW創建視圖,且使用內連接INNERJOIN連接表。

 

2.顯示第一題創建的視圖view1的所有數據。

方法:

在對象資源管理器中右擊“view1”視圖,在彈出菜單中選擇“編輯前200行”,即可查看該視圖中的數據。

步驟及結果:

分析:視圖實際上是一張虛擬表,物理上並不實際存在,由查詢數據庫表產生,兼有表和查詢的特點。

 

3.利用第一題創建視圖view1,列出視圖中所有姓李的員工的所有信息。

方法:

Use HrSystem

GO

SELECT * FROMview1 WHERE 姓名 LIKE '李%'

GO

步驟及結果:

分析:視圖兼具表和查詢的特點,故使用模糊查詢即可找到其中姓李的員工的全部信息。

 

4.使用ALTER VIEW修改第一題創建的視圖view1,使其只包含所有作者的姓名、職務和部門三列(視圖中的列名全部使用中文)。

方法:

Use HrSystem

GO

ALTER VIEW view1

AS

SELECT e.Emp_name AS 姓名,e.Title AS 職位,d.Dep_name AS 部門 FROM Employees eINNER JOIN Departments d

ON e.Dep_id=d.Dep_id

GO

步驟及結果:

分析:使用ALTER VIEW對對視圖進行修改,查詢所需的信息到視圖即可。

 

5.刪除以上創建的視圖view1。

方法:

Use HrSystem

GO

DROP VIEW view1

GO

步驟及結果:

分析:使用DROP VIEW語句刪除視圖。

 

(二)規則

以下操作均針對數據庫HrSystem。

1.使用CREATE RULE語句創建規則Sex Rule制定變量@sex的取值只能爲‘男’或‘女’。

方法:

Use HrSystem

GO

CREATE RULE SexRule

AS @Sex IN('男','女')

GO

步驟及結果:

分析:使用CREATE RULE創建規則,此題中將創建的規則指定到變量@Sex中。

 

2.完成後,在對象資源管理器中展開數據庫HrSystem->“可編程性”->“規則”,確認可以看到規則SexRule。

方法:

在對象資源管理器中展開數據庫HrSystem->“可編程性”->“規則”即可查看

步驟及結果:

分析:創建規則後只是對指定變量有限制,如需使用到特定的地方還得綁定規則。

 

3.使用存儲過程sp bindrule可以將規則SexRule綁定到表Employees的列Sex上。

方法:

Use HrSystem

GO

EXEC sp_bindrule'SexRule','Employees.Sex'

GO

步驟及結果:

分析:規則創建之後只是對指定變量有限制作用,若要使用則還需對其進行綁定。

 

4.執行下面的INSERT語句,向表Employees中插人一條記錄。

USE HrSystem

GO

INSERT INTOEmployees (Emp_name, Sex, Title, Wage, IdCard, Dep_id)

VALUES ('小李','無','職員',10000,'110123xxxx',1)

GO

確認是否可以成功執行INSERT語句,爲什麼?

方法:

由於設置員工編號爲主鍵,不予許爲null值,而題目所給代碼中添加一列員工編號爲null值的信息,故不能正常執行,如下圖所示:

所以爲員工編號添加一個值,纔可以正常運行該段代碼,纔可以檢驗“Sex Rule”是否綁定到“Employees.Sex”列上,代碼如下所示:

Use HrSystem

GO

INSERT INTO Employees(Emp_id,Emp_name, Sex, Title, Wage, IdCard, Dep_id)

VALUES (9,'小李','無','職員',10000,'110123xxxx',2)

GO

步驟及結果:

分析:綁定規則後,該列只能按照規則要求來插入信息。

 

5.使用存儲過程sp_unbindrule取消表Employees的列Sex上綁定的規則。成功後再執行第四步中的INSERT語句,確認是否可以成功執行INSERT語句,爲什麼?

方法:

解除規則綁定:

Use HrSystem

GO

EXEC sp_unbindrule'Employees.Sex'

GO

嘗試插入信息:

Use HrSystem

GO

INSERT INTO Employees(Emp_id,Emp_name,Sex,Title,Wage,IdCard,Dep_id)

VALUES (9,'小李','無','職員',10000,'110123xxxx',1)

GO

步驟及結果:

解除規則綁定:

嘗試插入信息:

分析:在解除綁定規則後,規則不再對該列起限制作用,也使得可能插入一些無意義的信息。

 

6.使用DROP RULE刪除規則SexRule。完成後,在對象資源管理器中展開數據庫HrSystem->“可編程性”->“規則”,確認是否可以看到規則SexRule。

方法:

Use HrSystem

GO

DROP RULE SexRule

GO

步驟及結果:

分析:使用DROP RULE刪除規則,刪除後則不復存在。

 

(三)索引

執行以下語句,利用數據庫HrSystem的表Employees產生一個新表emp,該新表包含了表Employees中的所有記錄。

USE HrSystem

SELECT * INTOemp FROM Employees

創建新表結果如下圖所示:

 

1.在新表emp上建立一個唯一聚集索引,索引名稱爲name_ind, 索引字段爲Emp_name。

方法:

Use HrSystem

GO

CREATE UNIQUE CLUSTERED INDEX [IX_name_ind] ON dbo.emp(Emp_name)

GO

步驟及結果:

分析:創建索引基本語法爲:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED] INDEX 索引名ON{表名|視圖名}(列名[ASC|DESC][,…n]),其中默認爲非聚集索引。

 

2.使用SQL Server Management Studio查看索引name_ind 的屬性信息。

方法:

在對象資源管理器中展開數據庫HrSystem->表->emp->索引->右擊“索引name_ind”,在彈出菜單選項中選擇屬性,即可查看。

步驟及結果:

分析:索引屬性包含索引表名、索引名稱、索引類型(是否聚集)、唯一性和索引鍵列。

 

3.使用DROP INDEX語句刪除第1題創建的索引name_ind。

方法:

Use HrSystem

GO

DROP INDEX emp.IX_name_ind

GO

步驟及結果:

分析:使用DROP INDEX語句刪除索引。

 

三、實驗小結【對自己而言,通過實驗學到的關鍵技術方法】

 1、視圖是外觀幾乎和表一樣,它同樣具有命名的字段和數據項,但實際上它並沒有物理存儲結構,只是一張虛擬表,但兼備表和查詢的特點;

2、視圖的特點總結如下:

a、可以只顯示用戶所關心的特定數據,可以屏蔽數據的複雜性,方便用戶使用,簡化數據操作;

b、可以讓不同的用戶以不用的方式看到不同或者相同的數據集;

c、組合區分數據,增加了數據的安全性。

3、規則執行的功能與檢查性約束相同,在創建後只是對指定變量起限制作用,對於表的列則需要綁定後纔可使用,一個列只可以使用一個規則,但可以使用多個檢查性約束;

4、索引的創建有助於提高查詢效率,其分爲聚集非聚集和兩類,它們都可以是唯一的,一個表只能有一個聚集索引,且稱該表爲聚集表。

 

智者樂水,仁者樂山,幸福之人關注理工科日記

獲取原文文檔請關注“理工科日記”,回覆數據庫獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章