前言

前面给大家介绍了查询语句,感觉写的还不错的,喜欢的可以去查看。今天给大家分享的是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++ this指针

    背景 matrix operator*=(const matrix &a){ *this=*this*a; return *this; } XXX:诶,你这个*this是什么啊,是指针吗 博主 ...

  2. Redis主从复制(Master/Slave)

    Redis主从复制(Master/Slave) 修改配置文件 拷贝多个redis.conf文件分别配置如下参数: 开启daemonize yes pidfile port logfile dbfile ...

  3. C++ STL pair详解

    一.解释: p { margin-bottom: 0.25cm; direction: ltr; color: #00000a; line-height: 120%; text-align: left ...

  4. java中的各种数据类型在内存中存储的方式

    原文地址:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8251456 1.Java是如何管理内存的 java的内存管理就是对象的分配和释放问 ...

  5. Python应用场景

    Web应用开发 Python经常被用于Web开发.比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序.Python定义了WSGI标准应用接口来协调Http服务器与基于P ...

  6. python实战第一天-paramiko模块并练习

    操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 安装paramiko ...

  7. swift UITextView内容距离边框边距设置

    des_textView.textContainerInset = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10) 设置对应的四个边距的值

  8. HTML的正确入门姿势——基本结构与基本标签

    一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML文档的结构 HTML文档主要包括三大部分:文档声明部分.<head>头部部 ...

  9. Ubuntu apt-get update 失败

    apt-get碰上了"fetch http://--失败", 自带源在国内连接性不好. 解决:改用"阿里云Ubuntu源": https://www.yuren ...

  10. GitHub Student Developer Pack创建个人网站

    链接:https://zhuanlan.zhihu.com/p/20531579 这个开发包里有什么?作为学生开发者,如何最大化利用它的价值? Atom编辑器,GitHub推出的编辑器,和Sublim ...