【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、索引的创建有助于提高查询效率,其分为聚集非聚集和两类,它们都可以是唯一的,一个表只能有一个聚集索引,且称该表为聚集表。

 

智者乐水,仁者乐山,幸福之人关注理工科日记

获取原文文档请关注“理工科日记”,回复数据库获取。

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