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表结构相同数据相同的视图创建出来继续使用。
- 远程协助解决异常宕库的问题(r11笔记第75天)
- Nginx-helper纯代码版,文章评论发布自动清理Fastcgi缓存
- MySQL和Oracle行值表达式对比(r11笔记第74天)
- 闪回数据库不是“万金油”(r11笔记第73天)
- 修改Apache的超时设置,解决长连接请求超时问题
- Oracle 12cR2初体验(r11笔记第91天)
- MySQL中的undo截断(r11笔记第89天)
- Linux系统 df 命令显示异常、分区丢失问题解决
- MySQL主从、字典死锁、连接数的Python监控脚本
- MySQL Online DDL(二)(r11笔记第88天)
- 转-Android上面运行golang
- Golang适合高并发场景的原因分析
- 浅谈MySQL中的事务隔离级别(r11笔记第86天)
- 巧用echo命令解决Samba批量添加用户难题
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- kubernetes-深入理解pod对象(七)
- kubernetes-核心概念及创建应用(六)
- k8s1.13.0二进制部署-Dashboard和coredns(五)
- kubernetes监控-prometheus(十六)
- kubernetes监控-Heapster+InfluxDB+Grafana(十五)
- centos7 安装mysql5.7
- ceph-简介及安装(luminous)版
- Activiti7 查询用户任务列表
- ansible自动化部署工具
- IDEA Activiti 画图中文乱码
- k8s集群部署高可用完整版
- kubenetes-rancher多集群管理(二十二)
- kubernetes-helm程序包管理器(二十)
- Activiti7 组任务
- kubeadm快速部署kubernetes(十九)