1:什么是视图

2:视图和查询的区别

3:视图的优点

4:如何创建和管理视图

5:如何通过视图修改基本表的数据

6:如何通过视图实现数据的安全性

A:什么是视图:

视图(view):从一个或几个基本表中根据用户需要而做成一个虚表

     1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据

     2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户

B:视图与查询的区别:

视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:

它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.

               2:更新限制的要求不一样

                 要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.

               3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行.

                 比如:创建一个含有order by子句的视图,看一下可以成功吗?

C:视图的优点:

为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:

1:能分割数据,简化观点

   可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作.

2:为数据提供一定的逻辑独立性

   如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据

3:提供自动的安全保护功能

   视图能像基本表一样授予或撤消访问许可权.

4:视图可以间接对表进行更新,因此视图的更新就是表的更新

D:视图的创建和管理

   视图的创建

   1:通过sql语句

     格式:create view 视图名 as select 语句

          试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表]

   2:通过企业管理器 

     说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图

          2:在创建视图时,并非所有的select子查询都可用

            如:compute和compute by,order by[除非与top一起连用]

          3:但在查询时,依然都可以用在创建时禁用的select子查询

          4:在视图创建时,必须为没有标题列指定标题

视图的删除:

   1:通过sql语句:drop view 视图名

   2:通过企业管理器

     说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据

修改视图的定义

   1:通过企业管理器

   2:通过sql语句:

     格式:alter view 视图名 as 新的select语句

浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]

E:如何通过视图修改基本表的数据.

   1:在视图上使用insert语句

     通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制

       1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.

       2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败

       3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败

       4:不能在使用了distinct语句的视图中插入值,也不能修改值

       5:不能在使用了group by语句的视图中插入值,也不能修改值

2:使用update更新视图中的数据

        1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列

          例如:创建以下视图:create view del as

                           select 职工号,姓名,部门名称,负责人 from work1,部门

                           where work1.部门编号=部门.部门编号

               如果再执行下面的语句时:

                         update del set 职工号=\'001\',部门名称=\'wenda\' where 职工号=\'01\'[出现错误]

               只能够改成:update del set 职工号=\'001\' where 职工号=\'01\'

                         update del set 部门名称=\'wenda\' where 职工号=\'01\'

        2:不能在使用了distinct语句的视图中更新值

        3:不能在使用了group by语句的视图中更新值

3:使用delete删除视图中数据.

     通过视图删除数据最终体现为从基本表中删除数据

     格式:delete 视图名 [where 条件]

     说明:当视图由两个以上的基表构成时,不允许删除视图的数据

     例如:建一个视图kk

          create view kk as

          select 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]

使用with check option的视图

     如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.

     比如:create view xm as

          select * from work where 性别=\'男\'

          完全可以插入insert xm values(\'001\',\'女\',23,\'2400\'....)

尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.

     比如:create view xm as

          select * from work where 性别=\'男\' with check option

使用schemabinding的视图[使用绑定到构架]

我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.

     比如:create view 基本工资 with SCHEMABINDING

          as select 姓名,性别,基本工资 from dbo.work

     说明:1:不能使用“*”来创建此类型的视图

          2:创建此类型的视图时,一定要加上dbo.表名.

          3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定

          4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.

          5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.

 

     使用with encryption对视图进行加密

为了保护创建视图定义的原代码,可以对视图进行加密.

     比如:create view kk with encryption

          as select * from work where 职称=\'经理\'

     用sp_helptext来查看一下.或用企业管理器查看一下.

     说明:如果应用此项用户将无法设计视图

F:使用视图加强数据的安全

   一般通过使用视图共有三种途径加强数据的安全性   

      A:对不同用户授予不同的使用权.

      B:通过使用select子句限制用户对某些底层基表的列的访问

      C:通过使用where子句限制用户对某些底层基表的行的访问

   对不同用户授予不同的权限

SQL Server数据库视图的更多相关文章

  1. 2017-3-17 SQL server 数据库 视图,事务,备份还原,分离附加

    1.视图:只能查看,不能增删改不能有重复列 create view 名字as查询语句 2.事务:保证流程的完整执行 begin tran --开始事务监控 被监控的代码 ... ...if @@ERR ...

  2. Sql Server数据库视图的创建、修改

    if OBJECT_ID('Sales.USACusts') is not null drop view Sales.USACusts; go create view Sales.USACusts a ...

  3. SQL Server系统视图sys.master_files不能正确显示数据库脱机状态

    最近发现在SQL Server数据库(目前测试过SQL Server 2008, 2012,2014,2016各个版本)中,即使数据库处于脱机(OFFLINE)状态,但是sys.master_file ...

  4. 关于SQL SERVER数据库学习总结

    对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...

  5. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  6. 人人都是 DBA(V)SQL Server 数据库文件

    SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name] ,database_id ,suser_sname ...

  7. SQL Server - 数据库初识

      在互联网笔试中,常遇到数据库的问题,遂来简单总结,注意,以 Sql Server 数据库为例. 数据库 数据库系统,Database System,由数据库和数据库管理系统组成. 数据库,Data ...

  8. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...

  9. 《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

    1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL ...

随机推荐

  1. iOS视图控制器之间delegate传值教程

    之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的非常清晰,就将delegate部分翻译了一下.有兴趣能够看看. 原文: http://stack ...

  2. ThinkPHP页面跳转、Ajax技巧详细介绍(十八)

    原文:ThinkPHP页面跳转.Ajax技巧详细介绍(十八) ThinkPHP页面跳转.Ajax技巧详细介绍 一.页面跳转 $this->success('查询成功',U('User/test' ...

  3. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  4. [Network]Wireless and Mobile

    Wireless 1 Introduction 1.1 Elements 1. Wireless Hosts Wireless does not mean mobility. 2. Base Stat ...

  5. HDOJ/HDU 2717 Catch That Cow 一维广度优先搜索 so easy..............

    看题:http://acm.hdu.edu.cn/showproblem.php?pid=2717 思路:相当于每次有三个方向,加1,减1,乘2,要注意边界条件,减1不能小于0,乘2不能超过最大值. ...

  6. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Server常见问题

    1.ArcGIS 10.2有无测试版程序? 10.2没有正式的测试版程序,但是我们计划发布两个早期cuts软件给国际经销商.选中的用户和合作伙伴. 2.微软Azure云的ArcGIS forServe ...

  7. Twitter僵尸帐号厂商雇佣中国员工专填验证码_Web2.0 - Microblogging 微博_cnBeta.COM

    Twitter僵尸帐号厂商雇佣中国员工专填验证码_Web2.0 - Microblogging 微博_cnBeta.COM Twitter僵尸帐号厂商雇佣中国员工专填验证码

  8. HADOOP2.6

    LINUX下HADOOP2.6.0集群环境的搭建 本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 基础环境 JDK的安 ...

  9. 浅谈Storm流式处理框架(转)

    Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据.但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂. 有需求也就有创造,在Hadoop基本奠定了大数据霸 ...

  10. 自己做站点(二) 20块钱搞定一个企业站:域名&空间申请

    域名注冊的话,推荐大家用新网,由于申请费用确实非常低,但续费的价格还是比較高的,所以不妨多申请几年.打开站点: http://www.xinnet.com/ 注冊一个帐号,然后申请域名,你能够看到,费 ...