内容正文:
项目五 索引和视图
任务1 索引
任务2 视图
任务1 索引
任务引入
小林在创建大型数据库时发现信息比较混乱,要是能像书的目录一样通过搜索索引找到特定的值就好了。那么,怎么在数据库中创建索引?怎么查看和删除索引?
知识准备
可以利用索引快速访问数据库表中的特定信息。索引是对数据库表中一个或多个列的值进行排序的结构。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
在数据库关系图中,可以为选定的表创建、编辑或删除索引/键属性页中的每个索引类型。当保存附加在此索引上的表或包含此表的数据库关系图时,索引同时被保存。
一、创建索引
SQL Server提供了两种方法来创建索引:
直接创建索引: 间接创建索引:
在创建索引时,需要指定索引的特征。这些特征包括下面几项:
聚集还是非聚集。
惟一还是不惟一。
单列还是多列。
索引中的列顺序为升序还是降序。
覆盖还是非覆盖。
1.使用SSMS创建索引
选择“管理索引”命令
“从dbo.student中选择列”对话框
2.使用SQL语言创建索引
只有表或视图的所有者才能为表创建索引。
设置参数 新建索引
案例——在score表中的course_ID列上创建一个非聚集索引。
二、查看和删除索引
查看和删除索引均有两种方法:使用图形化界面和SQL语言。
1.使用SSMS查看和删除索引
创建IDX_ID索引
“索引属性”对话框
2.使用SQL语言查看和删除索引
(1)显示索引
要查看索引信息,可使用存储过程sp_helpindex。
案例——显示student表上的索引信息。
(2)删除索引
删除索引使用DROP INDEX语句,其语法格式如下:
DROP INDEX 'table.index | view. index' [,…n]
其中,“table”和“view”是索引列所在的表或索引视图;“index”是要除去的索引名称。索引名必须符合标识符的规则。“n”表示可以指定多个索引的占位符。
显示索引
任务2 视图
任务引入
小林想将数据库中的几个表导出为视图,然后通过视图检索数据和修改数据。那么,怎么在数据库中创建视图?怎么在视图中进行数据检索?怎么通过视图修改数据?
知识准备
视图是从一个或者多个表中使用SELECT语句导出的。那些用来导出视图的表称为基表。视图也可以从一个或者多个其他视图中产生。导出视图的SELECT语句存放在数据库中,而与视图定义相关的数据并没有在数据库中另外保存一份,因此,视图也称为虚表。视图的行为和表类似,可以通过视图查询表的数据,也可以修改表的数据。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。所以说,视图是一种SQL查询。在数据库中,存储的是视图的定义,而不是视图查询的数据。通过这个定义,对视图查询最终转换为对基表的查询。
一、创建视图
要使用视图,首先必须创建视图。视图在数据库中是作为一个独立的对象进行存储的。创建视图要考虑如下的原则:
只能在当前数据库中创建视图。
视图名称必须遵循标识符的规则,且对每个用户必须惟一。此外,该名称不得与该用户拥有的任何表的名称相同。
可以在其他视图和引用视图的过程之上建立视图。
定义视图的查询不可以包含ORDER BY、COMPUTE或COMPUTE BY子句以及INTO关键字。
不能在视图上定义全文索引。
不能创建临时视图,也不能在临时表上创建视图。
不能对视图执行全文查询,但是如果查询所引用的表被配置为支持全文索引,就可以在视图定义中包含全文查询。
1.使用SSMS创建视图
视图保存在数据库中而查询不是,因此创建新视图的过程与创建查询的过程不同。通过SSMS不但可以创建数据库和表,也可以创建视图。
快捷菜单 “添加表”对话框
添加表到视图
选择需要的字段
2.使用SQL语句创建视图
案例——创建student_specialty视图,其中包括了学生姓名、专业和学院
视图中可以使用的列最多可达1024列。另外,在创建视图时,视图的名称存储在sysobjects表中。有关视图中所定义的列的信息添加到syscolumns表中,而有关视图相关性的信息添加到sysdepends表中。另外,CREATE VIEW语句的文本添加到syscomments表中。
输入视图名称 创建student_grade视图
创建student_specialty视图
二、使用视图
通过视图可以检索基表中的数据,也可以通过视图来修改基表中的数据,例如插入、删除和修改记录。
1.使用视图进行数据检索
视图是基于基表生成的,因此可以用来将需要的数据集中在一起,而不需要的数据则不需要显示。
使用视图来检索数据,可以像对表一样来对视图进行操作。
案例——使用创建的student_grade视图来查询成绩大于90分的学生
案例——使用SSMS查看视图的数据
查询成绩大于90分的学生
通过视图检索数据
2.通过视图修改数据
通过视图修改其中的某些行时,SQL Server将把它转换为对基表的某些行的操作。对于简单的视图来说,可能比较容易实现,但是对于比较复杂的视图,可能就不能通过视图进行修改。
案例——新建视图specialty1并添加数据
案例——更新数据
案例——新建视图,删除学号为16053113的数据
插入数据后的specialty表 更新后的college表
通过视图删除数据
三、删除视图
在创建视图后,如果不再需要该视图,或想清除视图定义及与之相关联的权限,可以删除该视图。删除视图后,表和视图所基于的数据并不受影响。任何使用基于已删除视图的对象的查询将会失败,除非创建了同样名称的一个视图。
在删除视图时,定义在系统表sysobjects、syscolumns、syscomments、sysdepends和sysprotects中的视图信息也会被删除,而且视图的所有权限也一并被删除。
1.使用SSMS删除视图
(1)在对象资源管理器中,展开“数据库”文节点,展开该视图所属的数据库,然后单击“视图”节点。
(2)这里选择“school”数据库“视图”节点中的st2_degree,右击鼠标,在弹出的快捷菜单中选择“删除”选项,打开“删除对象”对话框,其中的“显示依赖关系”按钮用于查看删除此视图对数据库的影响。
(3)单击“确定”按钮即可删除视图;单击“取消”按钮取消删除操作。
2.使用SQL删除视图
使用DROP VIEW语句可从当前数据库中删除一个或多个视图。
项目总结
项目实战
实战一 为emp表的“员工号”和“工作名称”列创建聚集索引,并且强制惟一性
(1)因为这里要创建强制唯一性的索引,必须先删除emp中已经存在的索引。
(2)在对象资源管理器中选取“factory”数据库,单击工具栏中的“新建查询”按钮
创建IDX_no索引
实战二 创建View1视图,查询所有员工的姓名、员工号、所在部门以及工资
查询所有员工的所在部门以及工资
$$