美文网首页
MySQL之视图VIEW

MySQL之视图VIEW

作者: wenmingxing | 来源:发表于2018-06-07 21:26 被阅读11次

本文主要介绍MySQL中的视图, 在什么情况下使用视图。

I、视图介绍

1.1 视图的初步理解

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

我们以一个例子来说明使用视图的场景:

假如我们需要从3个表中找出某个特定的数据

# 不能扩展的查询方法
> 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';  

上面的例子用于检索订购了某个特定产品的客户。任何需要这个数据的人必须理解相关表的结构,并且知道如何查询和对表进行联结。为了检索其他产品的相同数据,必须修改最后的WHERE子句。

假如可以将整个查询包装成一个名为productcustomers的虚拟表,则可以如下轻松的检索出数据:

# 假设使用虚拟表  
> SELECT cust_name, cust_contact  
   FROM productcustomers
   WHERE prod_id = 'TNT2';  

这就是视图的作用。productcustomers是一个视图,作为视图,它不包含表中应该由的任何列或数据,它包含的是一个SQL查询。

1.2 为什么使用视图

下面是一些视图的常见应用:
1、重用SQL语句;
2、简化复杂的SQL操作。在编写查询后,可以方便的重用它而不必知道它的基本查询细节;
3、使用表的组成部分而不是整个表;
4、保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限;
5、更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

在视图创建之后,可以用与表基本相通的方式利用它们。

1.3 视图的规则和限制

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

2、ORDER BY可以用在视图中,但如果从该视图检索数据的SELECT语句中也包含ORDER BY,则该视图中的ORDER BY将被覆盖;

3、视图不能索引,也不能有关联的触发器和默认值;

4、视图可以和表一起使用。

II、使用视图

1、使用CREAT VIEW语句创建视图;
2、使用SHOE CREATE VIEW viewname来查看创建视图的语句;
3、使用DROP删除视图,DROP VIEW viewname;
4、更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。

2.1 使用视图简化复杂的联结

我们一般首先创建视图完成表的联结,然后就可以服用这个联结:

# CREATE VIEW  
> CREATE VIEW productcustomer 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 cust_name, cust_contact
   FROM productcustomer
   WHERE prod_id = 'TNT2';

可以看出,视图极大地简化了复杂SQL语句的使用。利用视图,可以一次性编写基础的SQL,然后根据需要多次使用。

2.2 更新视图

1、通常情况下,视图是可以更新的,更新一个视图将更新其基表

2、但是,并非所有的视图都是可更新的。基本上可以这样说,如果MySQL不能正确地确定被更新的基数据,则不允许更新。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:
· 分组(使用GROUP BYHAVING);
· 联结;
· 子查询;
· 并;
· 聚集函数(Min, Count,Sum等);
· DISTINCT;

所以,一般情况下,我们应该只将视图用于检索(SELECT),而不用于更新(INSERTUPDATEDELETE)。

2.3 例题

牛客网_CREAE VIEW 例题1

【参考】
[1] 《MySQL必知必会》

相关文章

  • MySQL之视图VIEW

    本文主要介绍MySQL中的视图, 在什么情况下使用视图。 I、视图介绍 1.1 视图的初步理解 视图是虚拟的表,与...

  • MySQL视图(view)

    视图概述 视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作。 视图是一个虚拟...

  • mysql view(视图)

    mysql 视图是通过sql, 提前从一张表或几张表中查询出来的虚拟表, 视图不会存储数据, 不会对查询的速度产生...

  • mysql 批量修改视图定义者 DEFINER

    原文: MySQL如何批量修改视图(VIEW)的属主(DEFINER)参考: Mysql The user spe...

  • 视图和触发器

    视图 https://dev.mysql.com/doc/refman/5.7/en/create-view.ht...

  • 简介mysql之视图

    前言 我们在前文的事务和前文的mysql语句执行流程中都谈到了视图这个概念,其实Mysql有两个视图:1.view...

  • 视图

    视图1,虚拟表,mysql5.1版本出现的特性,是通过表动态的生成的数据。创建视图CREATE VIEW <视图名...

  • MySQL View 视图分析

    为什么MySQL中很少使用视图功能? 首先MySQL使用视图有什么好处: 清晰简单,可以让简单的语句逻辑更清晰 可...

  • Android 进阶之 View 的绘制(三)

    自定义 View 之 Layout 过程 作用 计算视图 View 的位置。 View 的 layout 过程 应...

  • mysql视图

    mysql视图 1. 视图可以叫sql语句更简单 2. 保护数据给不同的人看不同的数据 create view v...

网友评论

      本文标题:MySQL之视图VIEW

      本文链接:https://www.haomeiwen.com/subject/ktrgsftx.html