精华内容
下载资源
问答
  • 数据库总结六视图

    2010-05-14 20:13:19
    视图是由一个或多个数据表(基本表)或视图导出的虚拟表或查询表,是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。 视图是虚表。所谓的虚表,视图不是表。视图只储存了它的定义(select语句),而...

    视图是由一个或多个数据表(基本表)或视图导出的虚拟表或查询表,是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。

    视图是虚表。所谓的虚表,视图不是表。视图只储存了它的定义(select语句),而没有储存视图对应的数据,这些数据仍存放在原来的数据表(基表),数据与基表中数据同步,即对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。所谓的虚表,视图又像表,可以像基本表一样进行数据操作:查询、修改、删除和更新数据。

    T-SQL创建视图

      CREATE VIEW 视图名[(列名1 [,…n])]

      AS

      查询语句

    注意:

    (1) 定义视图的用户必须对所参照的表或视图有查询权限,即可执行SELECT语句。
    (2)
    不能使用COMPUTECOMPUTE BY子句。
    (3)
    不能使用ORDER BY子句。
    (4)
    不能使用INTO子句。
    (5)
    不能在临时表或表变量上创建视图。

    使用ALTER VIEW命令

      ALTER VIEW 视图名[(列名1 [,…n])]

      AS

      查询语句

    优点:

    (1)为用户集中数据,简化用户的数据查询和处理。有时用户所

    (2)简化用户权限的管理,也增加了安全性。

    (3)屏蔽数据库的复杂性。

    (4)便于数据共享。

    (5)可以重新组织数据以便输出到其他应用程序中。

    注意事项:

    (1)只有在当前数据库中才能创建视图。

    (2)视图的命名必须遵循标识符命名规则,不能与表同名,且对每个用户视图名必须是惟一的,即对不同用户,即使是定义相同的视图,也必须使用不同的名字。

    (3)不能把规则、默认值或触发器与视图相关联。

    (4)不能在视图上建立任何索引,包括全文索引。

    (5)使用视图查询时,若其关联的基本表中添加了新字段,则必须重新创建视图才能查询到新字段。

    (6)如果与视图相关联的表或视图被删除,则该视图将不能再使用。

    展开全文
  • 视图

    2017-01-18 08:08:32
    视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义... 通过视图,客户端不再需要知道底层table的表结构及其之间的关系视图提供了一个统一访问数据的接口。   为什么要使用视图(View)  从而我们不难发
    视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata.
        视图简单的理解如下:
         
        通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。
     
    为什么要使用视图(View)
       从而我们不难发现,使用视图将会得到如下好处:
     
       视图隐藏了底层的表结构,简化了数据访问操作 
       因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 
       使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 
       视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响 
     
    视图(View)的分类
        视图在SQL中可以分为三类
         普通视图(Regular View) 
         索引视图(Indexed View) 
         分割视图(Partitioned View) 
        下面从这几种视图类型来谈视图
     
    普通视图(Rugular View)
       普通视图由一个Select语句所定义,视图仅仅包含其定义和被引用表的metadata.并不实际存储数据。MSDN中创建视图的模版如下:
    CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
    [ WITH <view_attribute> [ ,...n ] ] 
    AS select_statement 
    [ WITH CHECK OPTION ] [ ; ]
    
    <view_attribute> ::= 
    {
        [ ENCRYPTION ]
        [ SCHEMABINDING ]
        [ VIEW_METADATA ]     } 
       参数还是比较少的,现在解释一下上面的参数:
       ENCRYPTION:视图是加密的,如果选上这个选项,则无法修改.创建视图的时候需要将脚本保存,否则再也不能修改了
       SCHEMABINDING:和底层引用到的表进行定义绑定。这个选项选上的话,则视图所引用到的表不能随便更改构架(比如列的数据类型),如果需要更改底层表构架,则先drop或者alter在底层表之上绑定的视图.
       VIEW_METADATA:这个是个很有意思的选项.正如这个选项的名称所指示,如果不选择,返回给客户端的metadata是View所引用表的metadata,如果选择了这个选项,则返回View的metadata.再通俗点解释,VIEW_METADATA可以让视图看起来貌似表一样。View的每一个列的定义等直接告诉客户端,而不是所引用底层表列的定义。
       WITH Check Option:这个选项用于更新数据做限制,下面会在通过视图更新数据一节解释.
     
       当然了,创建视图除了需要符合上面的语法规则之外,还有一些规则需要遵守:
       在View中,除非有TOP关键字,否则不能用Order By子句(如果你一意孤行要用Order by,这里有个hack是使用Top 100 percent…..) 
       View在每个Schema中命名必须独一无二 
       View嵌套不能超过32层(其实实际工作中谁嵌套超过两层就要被打PP了-.-) 
       Compute,compute by,INTO关键字不允许出现在View中 
       View不能建立在临时表上 
       View不能对全文索引进行查询 
     
       建立View一个简单的例子:
    CREATE VIEW v_Test_View1
    AS
    SELECT TOP 100 * FROM HumanResources.Employee
     
       视图建立完成后,就可以像访问表一样访问视图了:
    SELECT * FROM v_Test_View1
     
    在Management studio中,我创建视图的时候更喜欢用这样一种方法,将会便捷很多:
        
     
     
    
    索引视图(Indexed View)
        在谈到索引视图之前,我突然想起以前看过的一个漫画.话说咱们高端产品买不起,但是省吃俭用攒点钱买个IPhone装装高端总还是可以的吧:
     
           
     
        其实索引视图也很类似,在普通的视图的基础上,为视图建立唯一聚集索引,这时这个视图就变成了索引视图.套用上面漫画的公式:视图+聚集索引=索引视图
       索引视图可以看作是一个和表(Table)等效的对象!
        SQL Server中的索引视图和Oracle中的Materialized View是一个概念.想要理解索引视图,必须先理解聚集索引。聚集索引简单来说理解成主键,数据库中中的数据按照主键的顺序物理存储在表中,就像新华字典,默认是按照ABCD….这样的方式进行内容设置。ABCD….就相当于主键.这样就避免了整表扫描从而提高了性能.因此一个表中只能有一个聚集索引。
        对于索引视图也是,为一个视图加上了聚集索引后。视图就不仅仅再是select语句和表的metadata了,索引视图会将数据物理存在数据库中,索引视图所存的数据和索引视图中所涉及的底层表保持同步。
        理解了索引视图的原理之后,我们可以看出,索引视图对于OLAP这种大量数据分析和查询来说,性能将会得到大幅提升。尤其是索引视图中有聚合函数,涉及大量高成本的JOIN,因为聚合函数计算的结果物理存入索引视图,所以当面对大量数据使用到了索引视图之后,并不必要每次都进行聚合运算,这无疑会大大提升性能.
        而同时,每次索引视图所涉及的表进行Update,Insert,Delete操作之后,SQL Server都需要标识出改变的行,让索引视图进行数据同步.所以OLTP这类增删改很多的业务,数据库需要做大量的同步操作,这会降低性能。
        谈完了索引视图的基本原理和好处与坏处之后,来看看在SQL Server中的实现:
        在SQL Server中实现索引视图是一件非常,简单的事,只需要在现有的视图上加上唯一聚集索引.但SQL Server对于索引视图的限制却使很多DBA对其并不青睐:
        比如:
    索引视图涉及的基本表必须ANSI_NULLS设置为ON 
    索引视图必须设置ANSI_NULLS和QUOTED_INDETIFIER为ON 
    索引视图只能引用基本表 
    SCHEMABINDING必须设置 
    定义索引视图时必须使用Schema.ViewName这样的全名 
    索引视图中不能有子查询 
    avg,max,min,stdev,stdevp,var,varp这些聚合函数不能用 
         ………………
        
          还有更多…就不一一列举了,有兴趣的请自行Google之.
          下面我来通过一个例子来说明索引视图:
          假设在adventureWorks数据库中,我们有一个查询:
    SELECT p.Name,s.OrderQty
    FROM Production.Product p
     inner join Sales.SalesOrderDetail s
    ON p.ProductID=s.ProductID
    
        这个查询的执行计划:
         
        这时,我建立视图并在这个视图上建立唯一聚集索引:
    --建立视图
    CREATE VIEW v_Test_IndexedView
    WITH SCHEMABINDING
    AS
    SELECT p.Name,s.OrderQty,s.SalesOrderDetailID
    FROM Production.Product p
     inner join Sales.SalesOrderDetail s
    ON p.ProductID=s.ProductID
    GO
    --在视图上建立索引
    CREATE UNIQUE CLUSTERED INDEX indexedview_test1
    ON v_Test_IndexedView(SalesOrderDetailID)
     
       接下来,套用刘谦的台词:见证奇迹的时刻到了,我们再次执行之前的查询:
        
     
        从上面这个例子中,可以体会到索引视图的强大威力,即使你的查询语句中不包含这个索引视图,查询分析器会自动选择这个视图,从而大大的提高了性能.当然,这么强力的性能,只有在SQL SERVER企业版和开发版才有哦(虽然我见过很多SQL Server的开发人员让公司掏着Enterprise版的钱,用着Express版的功能……)
    分割视图(Partitioned View)
     
        分割视图其实从微观实现方式来说,整个视图所返回的数据由几个平行表(既是几个表有相同的表结构,也就是列和数据类型,但存储的行集合不同)进行UNION连接(对于UNION连接如果不了解,请看我之前的博文)所获得的数据集.
        分割视图总体上可以分为两种:
        1.本地分割视图(Local Partitioned View)
        2.分布式分割视图(Distributed Partitioned View)
       
        因为本地分割视图仅仅是为了和SQL Server 2005之前的版本的一种向后兼容,所以这里仅仅对分布式分割视图进行说明.
        分布式分割视图其实是将由几个由不同数据源或是相同数据源获得的平行数据集进行连接所获得的,一个简单的概念图如下:
     
         
        
       上面的视图所获得的数据分别来自三个不同数据源的表,每一个表中只包含四行数据,最终组成了这个分割视图.
        使用分布式分割视图最大的好处就是提升性能.比如上面的例子中,我仅仅想取得ContactID为8这位员工的信息,如果通过分布式视图获取的话,SQL Server可以非常智能的仅仅扫描包含ContactID为8的表2,从而避免了整表扫描。这大大减少了IO操作,从而提升了性能.
        这里要注意的是,分布式分割视图所涉及的表之间的主键不能重复,比如上面的表A ContactID是1-4,则表B的ContactID不能是2-8这个样子.
        还有一点要注意的是,一定要为分布式分割索引的主键加Check约束,从而让SQL Server的查询分析器知道该去扫描哪个表,下面来看个例子.
     
        在微软示例数据库AdventureWorks数据库,我通过ContactID从前100行和100-200行的数据分别存入两个表,Employee100和Employee200,代码如下:
    --create Employee100
    SELECT TOP 100 * INTO Employee100
    FROM HumanResources.Employee 
    ORDER BY EmployeeID
    --create Employee200
    SELECT *  INTO Employee200
    FROM 
    (SELECT TOP 100 *
    FROM HumanResources.Employee 
    WHERE EmployeeID NOT IN (SELECT TOP 100 EmployeeID FROM HumanResources.Employee ORDER BY EmployeeID)
    ORDER BY HumanResources.Employee.EmployeeID)AS e
     
       这时来建立分布式分割视图:
    CREATE VIEW v_part_view_test
    AS
    SELECT * FROM Employee100
    UNION 
    SELECT * FROM Employee200
     
       这时我们对这个索引进行查询操作:
     
    SELECT * FROM v_part_view_test
    WHERE EmployeeID=105
     
      下面是执行计划:
       
      通过上图可以看出,通过这种分割的方式,执行计划仅仅是扫描Employee200,从而避免了扫描所有数据,这无疑提升了性能.
      所以,当你将不同的数据表之间放到不同的服务器或是使用RAID5磁盘阵列时,分布式分割视图则进一步会提升查询性能.
     
      使用分布式分割视图能够在所有情况下都提升性能吗?那妥妥的不可能.使用这种方式如果面对的查询包含了聚合函数,尤其是聚合函数中还包含distinct。或是不加where条件进行排序.那绝对是性能的杀手。因为聚合函数需要扫描分布式分割视图中所有的表,然后进行UNION操作后再进行运算.
     
    通过视图(View)更新数据
       通过视图更新数据是我所不推荐的.因为视图并不能接受参数.我更推荐使用存储过程来实现.
       使用View更新数据和更新Table中数据的方式完全一样(前面说过,View可以看作是一个虚拟表,如果是索引视图则是具体的一张表)
       通过视图来更新数据需要注意以下几点
       1.视图中From子句之后至少有一个用户表
       2.View的查询无论涉及多少张表,一次只能更新其中一个表的数据
       3.对于表达式计算出来的列,常量列,聚合函数算出来的列无法更新
       4.Group By,Having,Distinct关键字不能影响到的列不能更新
     
       这里说一下创建View有一个WITH Check Option选项,如果选择这个选项,则通过View所更新的数据必须符合View中where子句所限定的条件,比如:
       我创建一个View:
        
     
    视图(View)中的几个小技巧
        1.通过视图名称查到视图的定义
    SELECT * FROM sys.sql_modules
    WHERE object_id=OBJECT_ID('视图名称')
    
    
     
       2.前面说过,普通视图仅仅存储的是select语句和所引用表的metadata,当底层表数据改变时,有时候视图中表的metadata并没有及时同步,可以通过如下代码进行手动同步
    EXEC sp_refreshview 视图名称
     
     
    视图(View)的最佳实践
        这是我个人一些经验,欢迎补充
       一定要将View中的Select语句性能调到最优(貌似是废话,不过真理都是废话…) 
       View最好不要嵌套,如果非要嵌套,最多只嵌套一层 
       能用存储过程和自定义函数替代View的,尽量不要使用View,存储过程会缓存执行计划,性能更优,限制更少 
       在分割视图上,不要使用聚合函数,尤其是聚合函数还包含了Distinct 
       在视图内,如果Where子句能加在视图内,不要加在视图外(因为调用视图会返回所有行,然后再筛选,性能杀手,如果你还加上了order by…..) 
     
    总结
        文中对视图的三种类型进行了详解.每种视图都有各自的使用范围,使用得当会将性能提升一个档次,而使用不当反而会拖累性能.
        我想起一句名言:“everything has price,always trade-off”…..

    展开全文
  • 查看视图层级关系

    2016-11-24 16:55:00
    debug view hierarchy( debug 区域第个按钮), 任何时候都可以进行操作,查看层级 2, LLDB 模式, 首先要打断点,使用LLDB 指令po, 示例代码: po [self.view recursiveDescription]; 此处的self.view ...

    1, xcode 的 debug area -> debug view hierarchy( debug 区域第六个按钮), 任何时候都可以进行操作,查看层级

    2, LLDB 模式, 首先要打断点,使用LLDB 指令po, 示例代码:

     po [self.view recursiveDescription];

    此处的self.view 可以换成任何 view, 更方便,精细,不过首先要设置断点,中断以后才能使用 LLDB模式

     

    转载于:https://www.cnblogs.com/shidaying/p/6098503.html

    展开全文
  • SQL复习视图

    2016-10-23 23:27:00
    视图关系数据库系统提供给用户以多角度观察数据库中数据的一种重要方法。视图是从一个或者几个表中导出的虚拟表。视图一经定义就可以被查询和删除。也可以在视图上定义视图。用视图完成数据的更新(增,删,改)...

    视图是关系数据库系统提供给用户以多角度观察数据库中数据的一种重要方法。视图是从一个或者几个表中导出的虚拟表。视图一经定义就可以被查询和删除。也可以在视图上定义视图。用视图完成数据的更新(增,删,改)操作有一定的限制。

    修改规则:

    1)如果视图是从多个表使用连接操作导出的,不可以更新;

    2)如果导出视图的过程中,使用了分组和集函数,不可以更新;

    3)如果视图是从单个基本表使用选择和投影,导出的属性集包含了基本表的一个候选集,这个视图成为“行列子集视图”,允许对其进行更新操作。

     

    1.1定义视图

    语法:

    create view  <视图名> [<列名1,列名……>]

    as <select 子查询语句>

    [with check option]

    组成视图的列名要么全部省略,要么全部指定。下列三种情况必须明确指定组成视图的列名:

      1)某个目标列不是单纯的属性名,而是集函数或列表达式;

      2)多连接导出的视图中有几个同名列作为该视图的属性列名

      3)需要在视图中为某个列启用新的更合适的名字。

    <select 子查询语句>可以是任意复杂的select语句,通常不允许有order by 和distinct短语;

    with check option 表示视图进行update,insert 和delete操作时要保证更新,插入和删除的元祖满足视图定义中的谓词条件(select子查询中的条件表达式)

    create viw emp_view 
    as select empno,ename,job,deptno from emp 
    with check option
    create  view emp_tatal (empno,ename,tatal)
    as select empno,ename,sal+ifnull(comm,0) from emp 

     

    1.2 删除视图

    语法:

    drop view <视图名>

    drop view emp_tatal;

     

    1.3 查询视图

    和使用基础表一样使用视图。

    select * from emp_view;

     

    1.4 更新视图

    跟新视图,指着通过视图来插入,删除,和修改数据。视图的跟新最终要转化为对基本表的更新。

     

    转载于:https://www.cnblogs.com/yuqt/p/5988531.html

    展开全文
  • 1、模板、文档、视图、框架的关系 连载1~5我们各个击破地讲解了文档、文档模板、视图和框架类,连载1已经强调这些类有着亲密的内部联系,总结1~5我们可以概括其联系为: (1)文档保留该文档的视图列表和指向创建...
  • 视图方面 文章目录视图方面(〇)概念基本...但是,视图并不在数据库中以存储的数据值集形式存在,其数据的物理存放位置仍然在数据库的表中,是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制
  • UIKit的默认坐标系统把原点设置在左上角...除了屏幕坐标系统窗口和视图也定义了它们自己的本地坐标系统, 这样允许你指定相对于视图或者窗口原点的坐标而不是屏幕。 Figure 1-4 UIKit中的坐标系统  因为每个
  • 章 路由与多视图

    2018-05-14 12:48:34
    在AngularJS应用中,我们可以把一个完整的HTML页面拆分成多个视图,每个视图实际上就是一段HTML片段,路由机制就是在每个视图和URL之间建立映射关系,当通过AngularJS路由API访问URL时,页面中能够加载对应的视图...
  • [本文1800字左右,预计阅读需要10-15分钟]在Hive中也是支持视图和索引的,但与关系型数据库中的又有所区别。让我们分别来了解下Hive中的视图与索引。Hive中的视图Hive 中的视图和RDBMS中视图的概念一致,都是一组...
  • c mysql 视图_mysql 视图

    2021-02-27 09:51:36
    、mysql 视图6.1、什么是视图① 定义视图是指计算机数据库中的视图,是一个虚拟...② 为什么需要视图关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要...
  • 视图的高度将帮助用户更好的了解元素间的层次关系,而阴影效果正是高度这一属性(View的 Z 属性)在视觉上的表现。指定视图高度视图的 Z 值包含两个部分: * Elevation:静态
  • 视图几何是描述同一场景不同视角的多幅图像与物体之间投影关系的几何模型。为了描述这种关系首先讨论单个相机只能获得一幅图像。实际意义是三维空间在二维空间上的一个投影。准确的说是变形的投影,因为相机投影...
  • 架构师的视图

    2019-08-03 10:10:29
    架构视图为我们提供了视图,下图展示了这视图以及架构设计与这些视图之间的关系,所有视图都是围绕架构设计展开,但又各自具备侧重点。通过完备的架构视图,系统架构就从一种抽象的概念转变成能够供干系人...
  • Heriarchy视图中出现的都是游戏对象,这些对象之间同样具有一定的关联关系。我们可以用树状结构来表示游戏对象之间复杂的父子关系。接下来会一起学习如何拓展Hierarchy视图。 拓展菜单:  Heriarchy视图,也可以对...
  • Item之间的关系
  • 1、UIView和CALayer之间的关系 ...总结:UIView专门负责事件传递和视图响应的,CALayer 专门负责视图的显示工作。这种设计体现了大设计原则中的单一职责原则。  1.2、为什么如此设计:这是单一职责原则的体现 ...
  • 从图上可以看出UML可以大致分为视图、事物、关系以及它的9种图。 视图 在逻辑视图中:逻辑视图通常由类图、对象图以及包图表示,组件图通常由组件图表示,并发图通常由状态图、活动图、时序图、协作图表示,配置图...
  • UML Rose的使用() --component视图

    千次阅读 2004-08-24 16:49:00
    组件之间的关系只有依赖性关系。依赖性要求一个类要在另一个类之前编译。组件类型:1.源代码库和运行组件。 stereotype: 子程序规范和体:subprogram specification and body 包规范和体:Package Specification ...
  • #数据库--第4章 数据库视图

    千次阅读 2020-05-02 17:25:13
    二、视图的创建三、视图的删除四、视图的查询五、视图的增删改、总结:   这一章节将会介绍所有的数据库视图操作,使用的数据是 第一章 介绍和导入的数据。 一、什么是视图?   视图关系数据库系统提供给...
  • 欢迎来到我的《从源码中学Vue》专题系列文章,更多精彩内容持续更新中,欢迎关注 :)上一章节我大概分析了下在Vue中的 Watcher、Observer、Dep三者的关系,以及如何检测数据变化去更新视图的,以及通过源码分析了vue...
  • 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表scores,结构如下 id 学生 科目 成绩   思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该...
  • 欢迎来到我的《从源码中学Vue》专题系列文章,更多精彩内容持续更新中,欢迎关注 :)上一章节我大概分析了下在Vue中的 Watcher、Observer、Dep三者的关系,以及如何检测数据变化去更新视图的,以及通过源码分析了vue...
  • 讲 模板、文档、视图、框架的关系及消息流动机(一) 第讲 模板、文档、视图、框架的关系及消息流动机(二) 第七讲 实例剖析(一) 第七讲 实例剖析(二) 第七讲 实例剖析(三) 实用技巧 ...
  • 我们不排除后续需要更多表的可能性,把所有模型和视图函数写在一起看着也太混乱了!为此,我们新建一个models.py,把三个模型都放在这里。 由于是新建的models.py文件,我们同样要先在开头生成一...
  • 原文:ASP.NET Core 2 学习笔记(十)视图ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML、CSS等。...之前 ASP.NET Core 2 学习笔记()MVC 有稍微介绍到Views及Controller的对应关系,这...
  • 前期概述:UITabBar它是UINavigationController的管理者,其层级关系如下:App->window->tabBar->naVC->VC准备工作:我们要建立视图控制器对此我们只拿两个作为例子创建按钮1. FirstViewController *firstVC=[...
  • Mysql 之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份阅读目录一:视图二:触发器三:存储过程四:函数五:事物:数据库锁七:数据库备份一:视图视图:是一个虚拟表,其内容由查询定义。...
  • 目前关系数据库有种范式: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 425
精华内容 170
关键字:

六视图关系