zoukankan      html  css  js  c++  java
  • 十、视图

    1. 为什么使用视图?

    • 重用SQL语句。
    • 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
    • 使用表的组成部分而不是整个表。
    • 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。

    在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行 SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。

    因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。有可能性能下降的厉害。

    2.视图规则。

    • 唯一命名。
    • 可以创建的视图数目没有限制。
    • 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
    • 视图可以嵌套, 即可以利用从其他视图中检索数据的查询来构造一个视图。
    • ORDER BY 可以用在视图中,但如果从该视图检索数据 SELECT 中也含有 ORDER BY ,那么该视图中的 ORDER BY 将被覆盖。
    • 视图不能索引,也不能有关联的触发器或默认值。
    • 视图可以和表一起使用。例如,编写一条联结表和视图的 SELECT语句。

    3.视图的使用。

    (1)语法。
    • 视图用 CREATE VIEW 语句来创建。
    • 使用 SHOW CREATE VIEW viewname;来查看创建视图的语句。
    • 用 DROP 删除视图,其语法为 DROP VIEW viewname;
    • 更新视图时,可以先用DROP再用CREATE,也可以直接用CEATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原
      有视图。
    (2) 实际使用。

    假如我们要找到prod_id为‘TNT2’的订单号、顾客的信息,我们将使用三张表如下:

    mysql> select cust_name,cust_contact
    -> from customers,orders,orderitems
    -> where customers.cust_id = orders.cust_id
    -> and orderitems.order_num = orders.order_num
    -> and prod_id = 'TNT2';
    

    这样很复杂,我们可以把需要的字段都提炼出来成为一个视图:

    mysql> create view productcustomers 
    -> as select cust_name,cust_contact,prod_id
    -> from customers,orders,orderitems
    -> where customers.cust_id = orders.cust_id
    -> and orderitems.order_num = orders.order_num;
    

    现在我们只要在视图中检索prod_id值为'TNT2'即可。

    mysql> select cust_name,cust_contact 
    -> from productcustomers
    -> where prod_id = 'TNT2';
    

    结果一致:

    +----------------+--------------+
    | cust_name      | cust_contact |
    +----------------+--------------+
    | Coyote Inc.    | Y Lee        |
    | Yosemite Place | Y Sam        |
    +----------------+--------------+
    2 rows in set (0.00 sec)
    

    创建可重用的视图:

    扩展视图的范围,有助于我们之后反复使用此视图而不用新建其它的视图。例如我们上面生产所有产品的客户而不仅仅是生产TNT2的客户。这样就可能有助于我们之后的检索了。

    视图使用情况:
    可以将我们需要的一些值放到视图中,比如连接的新数据:

    Create View vendorlocation AS
    select concat(RTrim(vend_name),'(',RTrim(vend_Country),')') 
    as vend_title
    from vendors;
    

    这样下次从这个视图里检索数据进行了。

    又比如我们可以把非空值的数据都检索到一个视图中,下次查询非空值就可以直接检索这个视图。

    我们也可以使用计算字段和视图一起。比如两个列相乘,也可以保存在视图中,之后直接检索这个视图即可。

    (3) 视图使用注意。

    我们使用视图是为了检索,而不是更新数据。

    即使我们也可能可以通过视图来修改数据(这样基表中的数据也会被改变),但是我们不提倡这么做。而且视图中更新数据也很有限制。使用分组,子查询,并,联结,聚集函数,distinct等定义的视图都不能被更新。

  • 相关阅读:
    django rest framework renderer
    django集成celery
    Celery
    ajax csrftoken
    验证码刷新、倒计时
    C++ const关键字以及static关键字
    git 查看当前仓库地址以及设置新的仓库地址
    C++ explicit关键字
    SSD训练网络参数计算
    C++ opencv调用resize修改插值方式遇到的坑
  • 原文地址:https://www.cnblogs.com/love-jelly-pig/p/10368653.html
Copyright © 2011-2022 走看看