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

    1、视图概述

      a、视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

      b、视图仅仅是用来查看存储在别处的数据的一种方式,视图本身不包含数据,因此他们返回的数据是从其他表中检索出来的。

      实例:

      不使用视图——实例

      a、通过select 语句从3个表中检索数据:

        SELECT cust_name,cust_contact

        FROM customers,orders,orderitems

             WHERE customers.cust_id = order.cust_id

          AND orderitems.order_num = order.order_num

          AND prod_id = 'T2';

        查询用来检索订购了某个特定产品的客户,任何需要这个数据的人都必须理解相关表的结构,并且知道任何创建查询和对表进行联结子句

      使用视图——实例

      a、把整个查询包装成一个名为 productcustomers的虚拟表,则可以如下轻松的检索出相同的数据

        SELECT cust_name,cust_contact

        FROM productcustomers 是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询

    2、为什么使用视图

      a、重用SQL语句

        简化复杂的SQL操作,在编写查询后,可以方便地重用它而不必知道它的基本查询细节

      b、使用表的组成部分而不是整个表

      c、保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限

      d、更改数据格式的表示,视图可返回与底层表的表示和格式不同的数据

    3、视图的规则和限制

      a、与表一样,视图名必须唯一;

      b、对于可以创建的视图数目没有显示;

      c、为了创建视图,必须具有创建视图的权限;

      d、视图可以嵌套,即可利用从其他视图中检索数据的查询来构造一个视图;

      e、ORDER BY 可以在视图中,但如果从该视图检索数据SELECT 中也包含有ORDER BY,那么该视图中的ORDER  BY 将被覆盖;

      f、视图不能使用索引,也不能有关联的触发器或默认值;

      g、视图可以和表一起使用

    4、视图的操作

      a、CREATE VIEW 视图名字;——创建视图

      b、SHOW CREATE VIEW 视图名字;——查询创建视图的语句

      c、DROP VIEW 视图名字;——删除视图

      d、更新视图时,可先使用DROP删除后用CREATE 重新创建

      e、SHOW table status where comment = ‘view’;——查询已有哪些视图存在语句

      利用视图简化复杂的联结

      a、视图的最常见的应用之一是隐藏复杂的SQL,实例:

      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;

      利用视图重新格式化检索出的数据

      下面SELECT 语句在单个组合计算列中返回供应商名和位置

      SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title

      FROM vendors

      ORDER BY vend_name;

      假如经常需要这个格式的结果,不必在每次需要时执行联结,创建一个视图,每次需要时使用它即可;

      利用视图过滤不想要的数据

      定义customermaillist视图,它过滤没有电子邮件地址的客户

      CREATE VIEW customermaillist AS 

      SELECT cust_id,cust_name,cust_email

      FROM customers

      WHERE cust_email IS NOT NULL;

      利用视图与计算字段

      a、视图对于简化计算字段的使用特别有用;

      如:检索某个特定订单中的物品,计算每种物品的总价格;

      SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price

      FROM orderitems

      WHERE order_num=001;

      更新视图

      a、对视图可以进行INSERT、UPDATE、DELETE操作

      b、更新一个视图将更新其基表,如果对视图增加或删除行,实际上是对其基表增加或删除行

      c、并非所有的视图都可以更新,如果MYSQL不能正确地确定被更新的基数据,则不允许更新,如果视图定义中有以下操作,则不能进行视图的更新操作

        1)、分组(使用GROUP BY 和 HAVING)、联结、子查询、表的联合

        2)、使用了聚集函数,MIN()、COUNT()、SUM()等。

    个人学习笔记
  • 相关阅读:
    ios UIWebView截获html并修改便签内容(转载)
    IOS获取系统时间 NSDate
    ios 把毫秒值转换成日期 NSDate
    iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用
    IOS开发 xcode报错之has been modified since the precompiled header was built
    iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
    iOS 切图使用 分辨率 使用 相关总结
    整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
    Java面试之PO,VO,TO,QO,BO
    Notes模板说明
  • 原文地址:https://www.cnblogs.com/feihan/p/14353896.html
Copyright © 2011-2022 走看看