关于SQL中View语句的详细讲解.doc_第1页
关于SQL中View语句的详细讲解.doc_第2页
关于SQL中View语句的详细讲解.doc_第3页
关于SQL中View语句的详细讲解.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于SQL中View语句的详细讲解众所周知,View就是命名了的SQL语句,在数据库中以虚表形式存在的对象。为什么说是虚表,因为View中呈现给用户的数据完全是存储在来自于View的底层对象- Table中。View有三种类型:Regular View,Updateable View以及Indexed View。下面我们就来探讨一下View的共性。创建View的语法为:Create View v_NameWith AsSQL statementWith Check Option其中View_Attribute包括三种属性:1) Encryption: 加密视图定义,一旦视图被加密,任何人都无法看到视图的定义,包括数据库管理员和系统管理员对无法对加密的视图定义进行解密,所以以后不能对加密的视图进行维护,只能drop掉然后重新Create,所以在你决定加密视图定义之前最好有一个该视图定义的备份。2) Schemabinding:架构绑定。如果你所创建的视图附带了这个属性,那么任何在该视图中关联的表、视图都无法被drop掉,除非首先drop掉这个视图。所以一些数据库管理员在创建数据库表的时候,会创建一个和表结构一样的Schemabinding视图,即使这个视图从来不用,这样做的目的就是防止一些关键性的表被系统管理员不小心drop掉。3) View_Metadata:如果创建视图的时候附带这个属性,The VIEW_METADATA option returns metadata about a view to client-side data access libraries.另外在创建视图的时候也有如下四条限制:1) 不能使用Compute / Compute by /Option语句2) 不能使用INTO关键字3) 不能引用临时表和表变量4) 不能使用order by语句,除非有top关键字存在另外一个对视图对象要关注的就是权限问题,由于视图可能引用很多表,所以对视图有select权限的User,并不一定对视图所引用的基表有Select权限。比如下图:T_Customer - V_CustomerAddress Updateable View对于可更新视图,主要是With Check Option选项,在SQL2000中,视图只有select功能,但是到了SQL2005中,视图同时具有了select,insert,update和delete的功能,假如我们创建一个视图如下(没有with check option选项):Create view ScoreViewwith schemabinding - Mainly used for security issue.asselect Name,Subject,Result from dbo.score where Result80这个时候如果我们执行 insert into ScoreView values(Bosco,English,71)操作,返回 1 row affected,表明插入成功,但是我们再执行 select * from ScoreView的时候确看不到刚才添加的记录,因为7180with check option此时,如果用户执行insert into ScoreView values(Bosco,English,71)操作,(71不满足视图定义的Where Result80)则SQL Server会返回如下错误信息给用户:Msg 550, Level 16, State 1, Line 1The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.The statement has been terminated.执行Update、Delete操作会得到同样的结果.注意: SQL Server 2005 和 SQL Server 2008 又有明显的不同,在SQL Server 2008中定义一个视图不带with check option选项,即使insert的值不满足视图定义中的where标准,仍可以插入成功,但是做update和insert操作,如果update/delete的值不满足视图定义中的where标准,则一直会得到0 row affected,表明没有任何行受到影响(没有错误信息),也就是说在SQL Server 2008中定义视图的时候,不带with check option选项,可以insert成功不满足where标准的行,但是不能update/delete不满足where标准的行,没有错误信息返回,只有0 row affected。2 Indexed View索引视图顾名思义就是在一个视图上创建一个索引。索引视图与常规视图的不同点在于:常规视图不保存数据,数据是存储在该视图所引用的基表中的,但是索引视图与此不同,索引视图把视图返回回来的结果集保存在硬盘上,以便下次直接使用,这样做的好处是可以大大提高查询速度,特别是一些聚合和计算型的SQL。创建索引视图的原则是索引视图所返回回来的数据相对保持稳定(比如一个月),并且该数据经常被用到(每天都用),如果索引视图返回回来的数据经常变,则维护的成本非常大,所以例如一些函数GetDate()不适用于索引视图,因为GetDate()每次执行的数据都不一样。而且创建索引视图还要满足一些列严格的条件,比如:SET NUMERIC_ROUNDABORT OFF; SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,QUOTED_IDENTIFIER, ANSI_NULLS ON所以一般不建议适用,知道有这么个东西就行了。附索引视图创建语法:-Set the options to support indexed views.SET NUMERIC_ROUNDABORT OFF; SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,QUOTED_IDENTIFIER, ANSI_NULLS ON; GO-Create view with schemabinding.IF OBJECT_ID (dbo.vOrders, view) IS NOT NULLDROP VIEW dbo.vOrders ; GOCREAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论