zoukankan      html  css  js  c++  java
  • Mysql 视图

    首先我们看看视图的定义:

        视图是指计算机数据库中的视图,是一个【虚拟表】,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    接下来看看优缺点:

    ● 简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

    ● 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。

    ● 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

    视图也存在一些缺点,主要如下:

    ● 性能:SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。

    ● 修改限制:当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的
    所以,在定义数据库对象时,不能不加选择地来定义视图,应该权衡视图的优点和缺点,合理地定义视图。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    扩展:视图可不可以增删改?
        要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。
    还有一些特定的其他结构,这类结构会使得视图不可更新。

    视图包含下述结构中的任何一种,那么它就是不可更新的:
    (1)聚合函数;
     
    (2)DISTINCT关键字;
     
    (3)GROUP BY子句;
     
    (4)ORDER BY子句;
     
    (5)HAVING子句;
     
    (6)UNION运算符;
     
    (7)位于选择列表中的子查询;
     
    (8)FROM子句中包含多个表;
     
    (9)SELECT语句中引用了不可更新视图;
     
    (10)WHERE子句中的子查询,引用FROM子句中的表;
     
    (11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。

    我们得出结论,在一些情况下,视图是可以修改数据的,但是我认为视图的本质,是为了在基本数据的基础上方便、独立、安全的查询数据,所以不建议利用视图来修改数据。(可以为视图设置权限。)
  • 相关阅读:
    cocos2dx-lua UI编辑器的设计思路
    软件中Undo(撤回)和Redo(重做)的实现
    Cocos2d-x上适合做工具的UI库:ImGui
    静态成员
    命名空间
    类对象的初始化
    函数的重载、重写与隐藏
    类的继承关系与访问限定符
    多继承
    友元函数与友元类
  • 原文地址:https://www.cnblogs.com/JK1989/p/7066474.html
Copyright © 2011-2022 走看看