zoukankan      html  css  js  c++  java
  • mysql---视图

    1、 简介:

    mysql5版本增加了对视图的支持, 所以本文章仅适用mysql5以后的版本

    视图是一张虚拟的表,其内容由查询定义,它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。

    视图本身不包含数据,所以通过视图返回的数据是从其他的表检索来的

    2、 示例

    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';

     创建视图order

    create view other as SELECT cust_name, cust_contact FROM customers, orders, orderitems 
    WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num;

    创建好后就可以这样取值了

    SELECT cust_name, cust_contact FROM order WHERE prod_id='TNT2';

    3、 作用

    • 重用sql语句
    • 简化复杂的SQL操作。在编写之后,可以方便的重用他而不必知道他的基本查询细节
    • 适用标的组成部分而不是整个表
    • 保护数据。可以给用户授予标的特定部分的范文全县而不是整个表的访问权限
    • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据

    在视图创建之后,可以用于基本表相同的方式操作视图,如select操作,过滤和排序,将视图连接到其他的视图或表,甚至能添加和更新数据(添加更新数据存在着一些限制,用的很少)。

    性能问题:由于视图补办含数据,所以每次查询都必须处理查询执行时所需的任一索引。如果使用多个连接和过滤创建了复杂的属兔或者嵌套的视图,可能会发现性能下降的很厉害,隐藏,再部署使用大量视图前要先测试。

    4、 规则和限制

    • 命名唯一
    • 视图个数没有限制
    • 权限要够
    • 可以嵌套,即可以利用从其他视图中检索出的数据查询来构造一个视图
    • order by 可以在视图中使用, 但是如果从该视图检索数据select中也有order by那么视图中的order by将会被覆盖
    • 不能索引,也不能有关联的触发器或默认值
    • 可以和表一起使用

    5、 使用视图

    • 创建 使用create view
    • 查看创建视图的语句
      SELECT cust_name, cust_contact FROM order WHERE prod_id='TNT2';
    • 删除:使用drop
      DROP VIEW viewname
    • 更新:可以先用drop再用create,也可以直接用 CREATE OR REPLACE VIEW 表示如果不存在则新建,存在则替换

    常用场景

    简化复杂连接:如上示例,使用视图时,将指定的where子句添加到视图中已有的where中

    重新格式化数据

    输入:

    SELECT Concat(RTrim(vend_name), '(' , RTrim(vend_country) , ')' ) AS vend_title FROM vendors ORDER BY vend_name;

    输出:

    +----------------------------+
    |  vend_title                |
    +----------------------------+
    |  ACME(USA)                 |
    |  AnvilsRUs(USA)            |
    |  FurballInc.(USA)          |
    |  JetSet(England)           |
    |  JouetsEtOurs(France)      |
    |  LTSupplies(USA)           |
    +----------------------------+

    创建视图

    CREATE VIEW vendorlocations AS SELECT Concat(RTrim(vend_name), '(' , RTrim(vend_country) , ')' ) AS vend_title FROM vendors ORDER BY vend_name;

    创建视图后查询语句直接 select * 即可

    使用视图过滤掉不想要的数据

    使用视图计算字段

    6、更新视图

    视图能否更新,要视情况而定

    通常视图是可以更新的(即,可以对他们使用,insert、update、delete)。更新一个视图将更新其基表,对视图的操作实际上都是对基表的操作。

    如果视图不能确定被更新的基数据,则不能被更新,如下的操作则不能更新:

    • 分组(使用group by 和having)
    • 连接
    • 子查询
    • 聚集函数(min、 count、sum等)
    • distinct
    • 导出(计算)列

    本文中的大部分示例都是不能更新的, 因为视图主要用于数据检索

     

  • 相关阅读:
    iOS UIScrollView 停止滑动 减速
    移动App-UI配制篇
    pathload --有效的网络带宽估计方法
    页面提交错误,页面间参数传递java.lang.NumberFormatException: null
    jquery easyui Accordion的使用
    利用开源HTML5引擎lufylegend.js结合javascript实现的五子棋人机对弈
    POJ 3221 Diamond Puzzle(BFS)
    信息管理系统怎样获取当前日期时间
    Unity3d-XML文件数据解析&JSON数据解析
    oracle data file header replace(測)
  • 原文地址:https://www.cnblogs.com/musl/p/13178972.html
Copyright © 2011-2022 走看看