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()等。

    个人学习笔记
  • 相关阅读:
    磁盘与文件系统管理
    zookeeper安装部署
    linux打包与压缩
    MongoDB聚合查询
    scrapy中选择器用法
    scrapy基本用法
    python操作mongoDB
    超详细windows安装mongo数据库、注册为服务并添加环境变量
    python beautifulsoup基本用法-文档搜索
    python beautifulsoup基本用法-文档结构
  • 原文地址:https://www.cnblogs.com/feihan/p/14353896.html
Copyright © 2011-2022 走看看