肥涵

导航

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

posted on 2021-01-31 20:31  肥涵  阅读(85)  评论(0编辑  收藏  举报