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

    一、介绍

      视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索的查询。如下:我们曾经使用的复杂查询:

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

      以上查询用来检索订购了某个特定产品的客户,现在我们可以吧整个外键关联的条件虚拟成一个productcustomers的虚拟表

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

    其中productcustomers是一个视图,它只是SQL查询,不包括任何数据。

    二、为什么使用视图

      1、重用SQL语句。

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

      3、使用表的组成部分,而不是整个表。

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

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

        视图会影响性能,因此使用大量视图时候需要谨慎。

    三、使用视图

      1、视图用create view语句创建。

      2、使用show create view viewname来查看创建视图的语句。

      3、用drop view viewname;删除视图。

      4、更新视图时,可以先用drop再用create,也可以直接用create or replace view进行替换更新

      

      1、利用视图简化复杂的链接,如下:

        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 * from productcustomers将自动列出订购了任意产品的客户。

      

      2、用视图重新格式化检索出的数据。

        使用视图可以重新格式化检索出的数据。如下:

        create view vendorlocations as select concat(rtrim(vend_name),'(',rtrim(vend_country),')') as vend_title from vendors order by vend_name;

        以上语句通过字段链接重新格式化了输出数据。

      3、用视图过滤不想要的数据

      我们可以使用视图过滤掉一些无用数据,比如没哟电子邮件的用户,如下:

      4、使用视图与计算字段,如下:

      

    为检索订单20005的详细信息,如下:

      select * from orderitemsexpanded where order_num=20005;

    四、更新视图

      至今为止,我们所建立的所有思路都是和select语句使用的,通常视图时可更新的,也就是对视图使用insert,update,delete,更新一个视图实际上是更新其基表,实际上是对其基表进行增删改

      但是MYSQL规定如果它本身并不能确认被更新的基数据,则不允许更新,如下都是不能确定基数据的方式:

      1、分组

      2、连接

      3、子查询

      4、并

      5、聚集函数

      6、distinct

      7、导出计算列。

  • 相关阅读:
    ps-- 制作磨砂背景
    ps -- 证件照
    抠图--薄,透
    60后发送短信的方法
    小项目 -- 验证码.js
    小项目
    小项目 -- phone.js
    基于GDAL提取地物,并生成png,最后加载到网页上(二)
    根据范围获取影像瓦片,并生成GeoTIFF 文件《一》
    Ubuntu 10.4 +NVIDIA GTX 1070 显卡驱动更新
  • 原文地址:https://www.cnblogs.com/television/p/8360159.html
Copyright © 2011-2022 走看看