资源简介 (共26张PPT)第6章 视图和索引本章目标◎本章内容■6.1 视图的概念■6.2 定义视图■6.3 视图的维护■6.4 通过视图操纵表数据■6.5 索引◎本章目标■掌握创建视图的方法■掌握管理视图的方法■掌握通过视图修改数据的方法■理解索引的概念■掌握创建索引的两种方式6.1 视图的概述6.1.1 视图的基本概念视图是一种数据库对象,是从一个或多个基表(或视图)导出的虚表。视图可以是一个数据表的一部分,也可以是多个基表的联合;视图也可以由一个或多个其他视图产生。基表(base table):独立存在的表。视图(View)——虚拟表。在SQL中只存储视图的定义,不存放视图所对应的记录6.1 视图的概述6.1.2 视图的优点(1)视图能够简化用户的操作。(2)视图使用户能从多种角度看待同一数据。(3)视图对重构数据库提供一定程序的逻辑独立性。(4)视图能够对机密数据提供安全保护。(5)使用视图可以重新组织数据6.2 定义视图6.2.1使用SQL Server Management Studio创建视图【例6-1】为数据库“学生选课”创建一个视图,该视图基于“课程”表和“教师”表,能够查看所有课程的课程名、学时、学分以及讲授每门课程的教师姓名和职称。6.2 定义视图6.2.2 使用T-SQL语句创建视图在SQL Server 2008中,使用CREATE VIEW 语句创建视图。语法格式如下:CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ][ WITH [ ,...n ] ]ASselect_statement[ WITH CHECK OPTION ] ::={ [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] } 视图名视图中所使用的列名搜索语句6.2 定义视图【例6-2】使用CREATE VIEW 语句,在“学生选课”数据库中创建一个基于教师表的视图“教师_view”,该视图要求查询输出所有教师的姓名、性别、职称。并要对该视图进行加密,不允许查看该视图的定义语句。创建这个视图对应的SQL语句如下:USE 学生选课GOCREATE VIEW 教师_viewWITH ENCRYPTIONASSELECT 姓名,性别,职称FROM 教师GO6.2 定义视图【例6-3】使用CREATE VIEW 语句,在“学生选课”数据库中创建一个基于学生表和选课表的视图“成绩_view”,该视图要求查询输出所有不及格学生的学号,姓名,课程名,成绩。USE 学生选课GOCREATE VIEW 成绩_viewASSELECT 学生.学号 AS 学生学号,姓名,课程名,成绩FROM 学生 INNER JOIN 选课 ON 学生.学号=选课.学号INNER JOIN 课程 ON 选课.课程号=课程.课程号WHERE 成绩<60GO6.3 视图的维护6.3.1 查看视图的定义信息1、查看视图的基本信息在SQL Server Management Studio中,可以查询视图的基本信息。也可以使用系统存储过程sp_help来显示视图的名称、拥有者能创建时间等信息。6.3 视图的维护6.3.1 查看视图的定义信息2、查看视图的文本信息sp_helptext可以查看视图、用户定义函数、存储过程、触发器等对象的定义信息。sp_helptext的语法格式为:sp_helptext [@objname=]'name'[,[@columnname=]computed_column_name]表示要查看定义信息的对象名表示计算列的列名6.3 视图的维护6.3.2 查看视图与其他对象的依赖关系查看视图与其他数据库对象之间的依赖关系可以使用系统存储过程sp_depends查看。【例6-7】查看“课程_view”视图的依赖关系。sp_depends 课程_view6.3 视图的维护6.3.3 修改和删除视图修改和删除视图有两种方式:1.使用图形工具修改和删除视图2.使用T-SQL语句修改和删除视图使用T-SQL语句修改视图的定义用ALTER VIEW语句,ALTER VIEW语句的语法与CREATE VIEW的语法类似.删除一个视图后,虽然它所基于的表和数据不会受到任何影响,但是依赖于该视图的其他对象或查询将会在执行时出现错误。6.4 通过视图操纵表数据6.4.1 通过视图修改数据通过视图修改数据,视图必须定义在一个表上并且不包括聚合函数或在SELECT语句中不包括GROUP BY子句。在修改视图时,需要注意通过视图修改数据的准则:如果在视图定义中使用了 WITH CHECK OPTION 子句,则所有在视图上执行的数据修改语句都必须符合定义视图的 SELECT 语句中所设置的条件。SQL Server 必须能够明确地解析对视图所引用基表中的特定行所做的修改操作。不能在一个语句中对多个基础表使用数据修改语句。对于基础表中需更新而又不允许空值的所有列,它们的值在 INSERT 语句或 DEFAULT 定义中指定在基础表的列中修改的数据必须符合对这些列的约束。分布式分区视图(远程视图)不能使用键集驱动游标更新。不能对视图中的 text、ntext 或 image 列使用 READTEXT 语句和 WRITETEXT 语句。6.4 通过视图操纵表数据6.4.2 使用INSERT插入数据使用视图插入数据与在基表中插入数据一样,都可以通过INSERT语句来实现。插入数据的操作是针对视图中的列的插入操作,而不是针对基表中的所有的列的插入操作。【例6-11】在数据库“学生选课”中,基于“学生”表创建一个名为“学生_view”的视图。该视图包含学号、姓名、性别等列信息。USE 学生选课GOCREATE VIEW 学生_viewASSELECT 学号,姓名,性别FROM 学生GO6.4 通过视图操纵表数据6.4.3 使用UPDATE更新数据在视图中更新数据与在基表中更新数据一样。但是当视图是来自多个基表中的数据时,与插入操作一样,每次更新操作只能更新一个基表中的数据。在视图中同样使用UPDATE语句进行更新操作,而且更新操作也受到与插入操作一样的限制条件。【例6-12】将前面视图“学生_view”中姓名为“张三”学生的性别更新为“0”。USE 学生选课GOUPDATE 学生_viewSET 性别=0WHERE姓名='张三'GO6.4 通过视图操纵表数据6.4.4 使用DELETE删除数据通过视图删除数据与通过基表删除数据的方式一样,在视图中删除的数据同时在基表中也被删除。当一个视图连接了两个以上的基表时,对数据的删除操作则不允许的。DELETE FROM 学生_view WHERE 姓名='张三'【例6-13】删除视图“学生_view”中姓名为“张三”的信息。6.5 索引6.5.1 索引概述索引是数据库规划和系统维护的一个关键部分。可以为SQL Server(以及其他的数据库系统)提供查找数据和定位数据物理位置的快捷方式。通过添加正确的索引可以大大减少查询执行时间。通过使用索引,可以大大提高数据库的检索速度,改善数据库的性能,其具体表现如下:(1)通过创建唯一性索引,可以保证数据记录的唯一性。(2)可以大大加快数据的检索速度。(3)可以加快表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。(4)在使用ORDEY BY 和GROUP BY子句进行数据检索时,可以显著减少查询中分组和排序的时间。(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。6.5 索引6.5.2 索引的分类 (1)聚集索引 (2)非聚集索引 (3)唯一性索引创建索引应注意以下几个问题:只有表的拥有者才能在表上创建索引。每个表上只能创建一个聚集索引。每个表上最多能创建249个非聚集索引。一个索引的宽度最大不能超过900字节,在char等类型的列上创建索引时应考虑 这一限制。数据类型为text、ntext、image或bit的列上不能创建索引。一个索引中最多包含的列数为16。6.5 索引6.5.3 创建索引SQL Server 2008中提供了三种创建索引的方法:1.使用SQL Server Management Studio创建索引6.5 索引6.5.3 创建索引2.使用表设计器创建索引6.5 索引6.5.3 创建索引3.使用CREATE INDEX创建索引【例6-16】对“教师”表的“联系方式”列创建名称为“教师_联系方式”的非聚集索引。对“学生”表的“学号”列和“姓名”列建立唯一的非聚集索引“IX_学号姓名”USE 学生选课GOCREATE NONCLUSTERED INDEX 教师_联系方式ON 教师(联系方式)GOCREATE UNIQUE NONCLUSTERED INDEX IX_学号姓名ON 学生(学号,姓名)GO6.5 索引6.5.4 查看索引索引信息包括索引统计信息和索引碎片信息,通过查询这些信息分析索引性能,可以更好地维护索引。索引统计信息是查询优化器用来分析和评估查询、确定最优查询计划的基础数据。①使用DBCC SHOW_STATISTICS命令来查看指定索引②使用SQL Server Management Studio 图形化工具查看统计信息③系统存储过程查看索引信息6.5 索引6.5.5 修改索引修改索引的方法有两种,使用方便的图形化工具和使用T-SQL语句,修改索引使用ALTER INDEX 语句,修改索引的操作主要包括:禁用索引、重新生成索引、重新组织索引。ALTER INDEX 语句的基本语法形式如下所示:1. 重新生成索引ALTER INDEX index_name ON table_or_view_name REBUILD2. 重新组织索引ALTER INDEX index_name ON table_or_view_name RGORGANIZE3. 禁用索引ALTER INDEX index_name ON table_or_view_name DISABLE6.5 索引6.5.6 删除索引T-SQL使用DROP INDEX语句删除索引。语法格式如下:DROP INDEX .也可以使用如下语法格式:DROP INDEX ON 在删除索引时,要注意下面的一些情况:当执行DROP INDEX 语句时,SQL Server释放被该索引所占的磁盘空间。不能使用DROP INDEX语句删除由主键约束或唯一性约束创建的索引。要想删除这些索引,必须通过删除这些约束。当删除表时,该表全部索引也将被删除。当删除一个聚集索引时,该表的全部非聚集索引重新自动创建。不能在系统表上使用DROP INDEX 语句。本章小结介绍了视图与索引的知识。管理视图包括建立视图和删除视图。在SQL Server 的T-SQL 语句中,CREATE VIEW 命令用于建立视图,DROP VIEW 命令用于删除视图。CREATE VIEW 命令中的查询可以有多种形式,从而可以建立多种不同类型的视图。对于用户而言,不同类型视图的区别在于系统对更新视图时的某些限制上,除此之外,别无差别。索引是一种特殊类型的数据对象,它可以用来提高表中数据的访问速度,而且还能够强制实施某些数据的完整性。SQL Server中的索引类型包括3种,即唯一性索引、非聚集索引和聚集索引。其中,唯一性索引要求所有数据行中任意两行的被索引列不能存在重复值;聚集索引可以提高使用该索引的查询能力,在聚集索引中行物理存储顺序与索引顺序完全相同,每个表只允许建立一个聚集索引;非聚集索引不改变行的物理存储顺序。一个表可以建立多个非聚集索引。 展开更多...... 收起↑ 资源预览