想来想去,总想写写SQL Server方面的知识,像视图、存储过程,大数据量操做的优化等等。html
先把基础的知识总结个遍先,而后再寻求更高更远的发展。这篇文章,将带你们来看看视图。数据库
何谓视图,视图包含行和列,就像一个真实的表(虚表)。视图中的字段就是来自一个或多个数据库中真实的表中的字段。咱们能够向视图添加 SQL 函数、WHERE 以及 JOIN 语句,咱们也能够提交数据,就像这些来自于某个单一的表。安全
对于视图跟函数的区别,不少人都想知道,我也想知道,也上网查询了相关的内容,可是大多只是解释其概念,并无区分明白。那么,就我学习到的内容,我也谈谈它们之间的区别。我认为视图跟内联表值函数比较接近(只是接近,可是不能取代)。不一样于标量函数只能返回一个值,不一样于多语句表值函数,能够有多条语句来返回表数据集。对于内联表值函数来说,视图没有参数传递的方式。而对于视图来说,它比内联表值函数多出一个WITH CHECK OPTION限制。WITH CHECK OPTION限制可看下文介绍。若是以为本人总结得很差,欢迎你们拍砖。让思惟碰撞出火花,让咱们共同进步。函数
建立视图 |
CREATE VIEW <视图名> [(<列名>[,<列名>]....)] AS <子查询> [WITH CHECK OPTION]
其中的[]为可选项,便可用可不用。WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操做时要保证更新、插入和删除的行知足视图定义中的谓词条件(即子查询中的条件表达式)。学习
建立视图可经过下图右键的方式来建立,也能够在新建查询窗口里面写建立视图的语句。大数据
CREATE VIEW [dbo].[VPerson](FName, FCity, FAge, FSalary) AS SELECT FName, FCity, FAge, FSalary FROM dbo.T_Person WHERE FAge=20 WITH CHECK OPTION
上面说了使用WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操做时要保证更新、插入和删除的行知足视图定义中的谓词条件(即子查询中的条件表达式),若是不知足的话,会怎么样?咱们来看看下面的例子:优化
UPDATE [dbo].[VPerson] SET FAGE=10 WHERE FAGE=20
报错以下:spa
试图进行的插入或更新已失败,缘由是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操做的一个或多个结果行又不符合 CHECK OPTION 约束。 语句已终止。
使用WITH CHECK OPTION能够这么解释:经过视图进行的操做,必须也能经过该视图看到操做后的结果。code
好比INSERT,那么加的这条记录在视图查询后必须能够看到。htm
好比UPDATE,修改完的结果也必须能经过该视图看到。
好比DELETE,只能删除视图里有显示的记录。
INSERT INTO [dbo].[VPerson]([FName],[FCity],[FAge],[FSalary]) VALUES('Peter','SZ', 20,2000)
上面INSERT的例子若是FAge不是20的话,则跟上面UPDATE的报错同样。
INSERT INTO [dbo].[VPerson]([FName],[FCity],[FSalary]) VALUES('Peter','SZ',2000)
由于视图[VPerson]使用了下面的语句,则对视图使用插入语句时,系统默认已经给FAage指定好了20这个条件值
WHERE FAge=20 WITH CHECK OPTION
删除视图 |
DROP VIEW <视图> [CASCADE];
其中的[]为可选项,便可用可不用。视图删除后视图的定义将从数据字典中删除。若是该视图上还导出了其余视图,则使用CASCADE级联删除语句,把该视图和由它导出的全部视图一块儿删除。
基本表删除后,由该基本表导出的全部视图(定义)没有被删除,但均已没法使用了。若是须要删除视图,则可使用上面的DROP VIEW语句来删除。
DROP VIEW [VPerson];
注:很奇怪,我使用了下面级联的删除语句,发现总是报错。查看了网上的一些资料,有人说没有级联的删除方式。不知道大伙知道不?
DROP VIEW [VPerson] CASCADE;
关键字 'CASCADE' 附近有语法错误。
视图做用 |
视图的做用,我转载博友(http://www.cnblogs.com/sunzhiyue/archive/2011/12/12/2284853.html )的内容。
第一点:使用视图,能够定制用户数据,聚焦特定的数据
解释:在实际过程当中,公司有不一样角色的工做人员。咱们以销售公司为例的话,采购人员,可能须要一些与其有关的数据,而与他无关的数据,对他没有任何意义,咱们能够根据这一实际状况,专门为采购人员建立一个视图,之后他在查询数据时,只需select * from view_caigou 就能够啦。 (固然拉,不会是叫人去装数据库客户端吧)
第二点:使用视图,能够简化数据操做
解释:咱们在使用查询时,在不少时候咱们要使用聚合函数,同时还要显示其它字段的信息,可能还会须要关联到其它表,这时写的语句可能会很长,若是这个动做频繁发生的话,咱们能够建立视图,这样之后,咱们只须要select * from view1就能够啦~,是否是很方便呀~
第三点:使用视图,基础表中的数据就有了必定的安全性
解释:由于视图是虚拟的,物理上是不存在的,只是存储了数据的集合,咱们能够将基础表中重要的字段信息,能够不经过视图给用户,视图是动态的数据的集合,数据是随着基面表的更新而更新。同时,用户对视图,不能够随意的更改和删除,能够保证数据的安全性。
第四点:能够合并分离的数据,建立分区视图
解释:随着社会的发展,公司的业务量不断的扩大,一个大公司,下属都设有不少的分公司,为了管理方便,咱们须要统一表的结构,按期查看各公司业务状况,而分别看各个公司的数据很不方便,没有很好的可比性,若是将这些数据合并为一个表格里,就方便多啦,这时咱们就可使用union关键字,将各分公司的数据合并为一个视图。
至此本文完。