一、实验目的
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、索引的创建有助于提高查询效率,其分为聚集非聚集和两类,它们都可以是唯一的,一个表只能有一个聚集索引,且称该表为聚集表。
智者乐水,仁者乐山,幸福之人关注“理工科日记”
获取原文文档请关注“理工科日记”,回复数据库获取。