MySQL(十)之视图

前言

前面给大家介绍了查询语句,感觉写的还不错的,喜欢的可以去查看。今天给大家分享的是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表结构相同数据相同的视图创建出来继续使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

[安全] mysqldump 备份的后门

1. 简介 mysqldump 是备份 MySQL 数据库的常用工具,其中会包含 创建表、删除表、插入数据 这些数据库操作的语句 而黑客可能会利用 mysqld...

3448
来自专栏云数据库

MyDumper原理简介

相对于 MySQL 官方提供的逻辑备份工具 mysqldump,mydumper 最突出的特性就是可采用多线程并行备份,极大提高了数据导出的速度。本文基于 my...

7058
来自专栏cloudskyme

提高数据库查询速度的几个思路

1、缓存,在持久层或持久层之上做缓存。 2、数据库表的大字段剥离,保证单条记录的数据量很小。 3、恰当地使用索引。 4、必要时建立多级索引。 5、分析O...

3968
来自专栏FreeBuf

如何使用基于整数的手动SQL注入技术

今天,我将教大家如何使用基于整型的手动SQL注入技术来对MySQL数据库进行渗透测试。提醒一下,这是一篇写给newbee的文章。话不多说,我们直奔主题!

1576
来自专栏地方网络工作室的专栏

Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用

Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用 在前面我用 python 脚本实现的 cli 版本...

2825
来自专栏维C果糖

史上最简单的 MySQL 教程(三十七)「数据备份与还原(下)」

数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。

3607
来自专栏阮一峰的网络日志

PostgreSQL新手入门

自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选。 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手。以下...

4424
来自专栏杨建荣的学习笔记

MySQL数据导入导出牛刀小试(r5笔记第3天)

最近学习了下MySQL中数据的导入导出,发现功能点真是丰富,很方便很快捷。 这些导入导出的方式还是有不少的细节的,在此先不做扩展和深入分析。 --数据导出 方式...

3744
来自专栏Java开发

Linux 卸载分区

卸载/dev/sda6分区 此时注意/dev/sda6是刚刚卸载了/data2的分区名

2042
来自专栏Samego开发资源

MySQL开启远程连接

5274

扫码关注云+社区

领取腾讯云代金券