前言

前面给大家介绍了查询语句,感觉写的还不错的,喜欢的可以去查看。今天给大家分享的是MySQL中的视图。

视图(View):视图是由查询结果形成一张虚拟的表。非临时表,只要不删除的话就会一直存放在磁盘上,但是没有对应的文件。视图的使用和正常的表的使用一样。

一、什么是视图

  视图是数据库数据的特定子集。可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据,这种方法可以保护用户和应用程序不受某些数据库修改的影响。
  视图是抽象的,他在使用时,从表里提取出数据,形成虚的表。不过对他的操作有很多的限制。
  视图是永远不会自己消失的除非手动删除它。
  视图有时会对提高效率有帮助。临时表几乎是不会对性能有帮助,是资源消耗者。
  视图一般随该数据库存放在一起,临时表永远都是在tempdb里的。
  视图适合于多表连接浏览时使用;不适合增、删、改,这样可以提高执行效率。

二、视图概述

  2.1、视图和表的区别

    视图是已经编译好的sql语句,而表不是。
    视图没有实际的物理记录,而表有。
    表是内容,视图是窗口。
    表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改。
    视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
    表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
    视图的建立和删除只影响视图本身,不影响对应的基本表。

  2.1、视图和表的联系

    视图是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。
    一个视图可以对应一个基本表,也可以对应多个基本表。
    视图是基本表的抽象和在逻辑意义上建立的新关系。

  2.3、视图的类型    

    因为不同的数据库,例如:Mysql、Sql Server、Oracle及DB2等,他们不论在视图的创建和类型上都有不同,特别是在类型上区别较大,所以这里我们以Mysql来说明总结,至于其它数据的特点会在日后继续更新。

      create [algorithm=算法] view v_name as select 语句
      algorithm = merge/temptable/undifined(前两种任选)

    在Mysql中视图的类型分为:

    1)MERGE

      将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。

      当引用视图时,引用视图的语句与定义视图的语句合并。

    2)TEMPTABLE

      将视图的结果集存放在临时表中,每次执行时从临时表中操作。

      当引用视图时,根据视图的创建语句建立一个临时表。

    3)UNDEFINED

      当引用视图时,根据视图的创建语句建立一个临时表。

      默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。

      所以,这里推荐使用MERGE算法类型视图。    

三、视图的基本使用

  环境:

    

  

  create view v_name as select 语句;

   

  创建完一个视图,可以通过查看数据库中的全部数据表来查看:

    

  可以看到当前数据库中已经把刚刚创建的视图放进数据库的表集合中了。因为视图也是一种表,是虚拟表。

  3.2、查询

    视图的查询和基本表的查询一样,因为视图也是一种数据表,所以你可以像这样的来查询它

    

  3.3、删除视图

drop view v_name;

   

    删除视图,对基本表没有任何的影响

  3.4、修改视图 

  alter view v_name as select 语句;

  结果检查: 

  3.5、更新视图

    1)创建新视图

      

    2)更新视图

     

     总结:更新会导致基本表中的数据也会相应的更新

四、使用视图的优点

  4.1、可以简化查询

    查询平均工资前三高的部门:

      

  4.2、可以进行权限控制

     把表的权限封闭,但是开放相应的视图查看权限,视图中只开放部分数据。

  4.3、大数据分表时可以用到 

   比如 一般情况下(无特殊优化)表的行数超过200w时,操作就会明显变慢,可以把一张表的数据,拆分成多张表来存放。
    利用视图,把多张表形成一张视图,看起来像是一整张表。

  4.4、便于数据库的维护整理   

   A、B表合成C表,要想让原来的SQL不变,可以通过C表,把A、B表结构相同数据相同的视图创建出来继续使用。

  

MySQL(十)之视图的更多相关文章

  1. 手把手教你mysql(十)索引

    手把手教你mysql(十)索引 一:索引的引入 索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 类似于图书的目录,方便快速定位,寻找指定的内容,如一本1000页的 ...

  2. Mysql中的视图

    什么是视图 通俗的讲,视图就是一条SELECT语句执行后返回的结果集.所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上. 视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执 ...

  3. MySQL基础之 视图

    视图 视图就是从一个表或多个表导出来的一张虚拟的表.通过这个窗口可以看到系统专门提供的数据,方便用户操作的同时增加了安全性. 视图的特点: 1.视图的列可以来自于不同的表. 2.视图是由实际存在的表创 ...

  4. MySQL数据库之视图

    1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...

  5. MySQL进阶(视图)---py全栈

    目录 mysql进阶(视图)---py全栈 一.什么是视图? 二.视图的特性 三.视图的优点 四.使用场合 五.视图基本操作 六.案例 mysql进阶(视图)---py全栈 一.什么是视图? 视图是从 ...

  6. Mysql学习笔记—视图

    1.什么是视图 视图(View)是一种虚拟存在的表.其内容与真实的表相似,包含一系列带有名称的列和行数据.但是视图并不在数据库中以存储的数据的形式存在.行和列的数据来自定义视图时查询所引用的基本表,并 ...

  7. MySQL学习——操作视图

    MySQL学习——操作视图 摘要:本文主要学习了使用DDL语句操作视图的方法. 了解视图 是什么 视图是从一个.多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行. 特点 视图不是数据 ...

  8. mysql 存储过程、视图---创建、调用、删除

    之前一直用的是Sql Server数据库,最近偶然机会接触到mysql.这里总结了关于mysql 存储过程.视图的“创建.调用.删除”示例 ============================== ...

  9. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  10. 【转】MYSQL入门学习之十:视图的基本操作

    转载地址:http://www.2cto.com/database/201212/176775.html 一.视图的基本介绍  www.2cto.com           视图是虚拟的表.与包含数据 ...

随机推荐

  1. C# 接口基础学习

    什么是接口  接口,在表面上是由几个没有主体代码的方法.属性.索引器.事件,或者它们的组合的集合体,有唯一的名称,可以被类或结构或者其他接口所实现(或者也可以说继承).它在形式上可能是如下的样子: i ...

  2. word2vec原理(三) 基于Negative Sampling的模型

    word2vec原理(一) CBOW与Skip-Gram模型基础 word2vec原理(二) 基于Hierarchical Softmax的模型 word2vec原理(三) 基于Negative Sa ...

  3. [补档][HNOI 2008]GT考试

    [HNOI 2008]GT考试 题目 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2... ...

  4. RabbitMQ入门-消息订阅模式

    消息派发 上篇<RabbitMQ入门-消息派发那些事儿>发布之后,收了不少反馈,其中问的最多的还是有关消息确认以及超时等场景的处理. 楼主,有遇到消费者后台进程不在,但consumer连接 ...

  5. Web安全测试——威胁攻防

    SQL注入 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL In ...

  6. 利用Java随机,生成随机学生数据

    为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 studen ...

  7. Entity Framework 帮助文档

    Entity Framework (EF) 帮助文档 在代码中定义实体,并生成数据库模型 原文链接 基于已有数据库创建 Code First 实体模型 原文链接 Entity Framework Fl ...

  8. Jmeter - foreach控制器之嵌套使用

    有需求如下: 对某分类列表分别上传随机个数的附件内容 由此想到可以使用jmeter自带的foreach控制器来实现,编写代码如下: 如图:两层循环,第一层由上方beashell获取大类列表,如下: 生 ...

  9. Kotlin 初窥门径[1]:基础概念

    Kotlin 是由 JetBrains 开发的基于JVM的语言.JetBrains 因为创造了一个强大的Java开发 IDE(Intellij) 而被大家所熟知.Android Studio 就是基于 ...

  10. exit()与_exit()的区别(转)

    http://blog.csdn.net/lwj103862095/article/details/8640037 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间, ...