SQL Server视图
想来想去,总想写写SQL Server方面的知识,像视图、存储过程,大数据量操作的优化等等。
先把基础的知识总结个遍先,然后再寻求更高更远的发展。这篇文章,将带大家来看看视图。
何谓视图,视图包含行和列,就像一个真实的表(虚表)。视图中的字段就是来自一个或多个数据库中真实的表中的字段。我们可以向视图添加 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
报错如下:
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。
使用WITH CHECK OPTION可以这么解释:通过视图进行的操作,必须也能通过该视图看到操作后的结果。
比如INSERT,那么加的这条记录在视图查询后必须可以看到。
比如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关键字,将各分公司的数据合并为一个视图。
至此本文完。
SQL Server视图的更多相关文章
- 11、SQL Server 视图、数据库快照
SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...
- 使用SQL Server视图的优缺点
SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...
- (4.22)sql server视图/索引视图概念
(4.22)sql server视图 关键词:sql server视图.索引视图 SQL Server视图是由SQL语句组成的逻辑数据库对象.它也可以称为由SQL语句组成的虚拟表,该SQL语句可能包含 ...
- CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using Syste ...
- SQL SERVER视图对查询效率的提高
SQL SERVER视图不仅可以实现许多我们需要的功能,而且对于SQL SERVER查询效率的提高也有帮助,下面一起来了解一下. 有两张数据表:A和B,其中A的记录为2万条左右,而B中的数据为200万 ...
- 通过 SQL Server 视图访问另一个数据库服务器表的方法
今天项目经理跑过来对我大吼大叫说什么之前安排让我做一大堆接口为什么没做,我直接火了,之前明明没有这个事情…… 不过事情还要解决,好在两个项目都是用的sqlserver,可以通过跨数据库视图来快速解决问 ...
- 数往知来SQL SERVER 视图 触发器 <九>
SQL server学习_视图 1.视图 视图其实是一张虚拟表,他是一张表的部分数据或多张表的综合数据(视图就是把SQL语句封装起来) 可以看做是一个结果集,但是不是一个结果集 视图不具备存储数据的能 ...
- SQL Server 视图
视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象.可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列:或者也 ...
- SQL Server 视图索引
在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命令视图.这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益.在视图上创建 ...
随机推荐
- Win7 服务优化个人单机版
我的PC设备比较旧了,为了系统能流畅点,不必要的服务就不开启了.然而,服务那么多,每次重装,都要从头了解一下一边,浪费时间. 个人在网络上收集信息并结合自己的摸索,整理如下,以备查找. 服务名称 显 ...
- windows server 2008 防火墙配置
防火墙的配置主要是过滤用户是否能够访问服务器,哪些用户能够访问,哪些用户不能访问.类似于交换机上的acl(访问控制列表) 在windows服务器上有入站规则以及出站规则,那我们首先得了解一下什么是入站 ...
- 对match() 和 exec() 返回值和属性的测试
语法: exec() : RegExpObject.exec(string) match() : stringObject.match(string) stringObject.match(regex ...
- Windows7下安装搭建Ngnix教程和配置详解
作者:Sungeek 出处:http://www.cnblogs.com/Sungeek/ 欢迎转载,也请保留这段声明.谢谢! 简介: Nginx ("engine x") 是一个 ...
- C++与Java多态的区别
多态是指用父指针指向不同子类对象时,调用其共有的函数,不同的子类会有不同的行为.虽然C++和Java都具有多态机制,但是他们的实现不同,使用时的效果也会略有不同. 在C++中 普通函数调用:具体调用哪 ...
- 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计
本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...
- jsp探针
在网上找到一些jsp探针,收藏下. JSP探针1.jsp <%@ page contentType="text/html;charset=gb2312" %> < ...
- PHP 登录完成后如何跳转上一访问页面
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面 项目需求 访问网站页面时,有的页面需要授权才能访问,这时候就会要 ...
- 无法创建链接服务器 "TEST" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例
在使用SQLserver建立远程服务连接Oracle的时候出现先下面错误 出现这个错误,我找到最常见的两个原因 1.注册表 <1>按下WIN+R,打开“运行”窗口,输入“regedit”, ...
- Android系统SVC命令教程
svc命令,位置在/system/bin目录下,用来管理电源控制,无线数据,WIFI # svc svc Available commands: help Show information about ...