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. codeforces 659C Tanya and Toys

    题目链接:http://codeforces.com/problemset/problem/659/C 题意: n是已经有的数字,m是可用的最大数字和 要求选自己没有的数字,且这些数字的数字和不能超过 ...

  2. 关于使用commons-email包测试发送邮件遇到的问题

    项目中有个需求是这样的:客户办理某一项业务,当用户成功提交业务办理信息后,系统生成一个业务随机码给用户,以此作为以后的业务办理结果查询依据.鉴于随机码较长,方便用户记录,在生成随机码的同时,提供用户发 ...

  3. Virtualbox mouse move in and out and file share with windows

    How to use Virstalbox to share files with Linux and Windows, and to move the mouse in and out Virtua ...

  4. ARM架构和编程-4

    ARM中断异常处理: ARM系统中止品种:按中断处理降序排列优先级:重置.数据访问中止.高速中断请求.外部中断请求.预取中止.令.软件中断. ARM体系中的异常中断向量表: 0x0 复位 0x4 没有 ...

  5. poj3662(二分+最短路)

    题目连接:http://poj.org/problem?id=3662 题意:有n个节点p条无向边,现在可以选择其中的任意K条免费,则花费为除了k条边后权值最大的一个,求最小花费多少. 分析:二分枚举 ...

  6. 2014年辛星解读Javascript之用DOM动态操纵HTML元�

    关于DOM,我们了解了能够用DOM操纵HTML的一些属性和样式,还能够为HTML元素绑定事件等等,那么接下来,我们将涉及到用DOM来动态的创建.删除HTML等一些操作,我的核心思路还是重实战,因此,代 ...

  7. SE 2014年5月22日

    一.   用自己的理解描述 tunnel接口状态 up和down的情况都有哪些 Tunnel接口的状态UP:隧道的目标有可达路由. Tunnel接口的状态Down:隧道的目标路由不可达. 如图配置实验 ...

  8. BGP协议学习总结

    BGP学习总结 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建 ...

  9. 利用python 提取log 文件里的关键句子,并进行统计分析

    利用python开发了一个提取sim.log 中的各个关键步骤中的时间并进行统计的程序: #!/usr/bin/python2.6 import re,datetime file_name='/hom ...

  10. 搜索树SVN的树的时候遇到的乱码问题

    public void listDirectoryNode(SVNRepository repository, String dirUrl, FileNode node) { String curre ...