6 MySQL视图
目录:
1. 视图概述
1.1 为什么引入视图
1.2 什么是视图
1.3 视图的好处
1.4 视图的分类
2. 视图的建立和删除
3. 实验
1. 视图概述
1.1 为什么引入视图[1]
问题:假如因为某种需要,a表与b表需要进行合并起来组成一个新的表c。最后a表与b表都不会存在了。而由于原来程序中编写sql分别是基于a表与b表查询的,这就意味着需要重新编写大量的sql(改成向c表去操作数据)。
解决方案:定义两个视图名字还是原来的表名a和b。a、b视图完成从c表中取出内容。通过视图就可以做到不修改。
1.2 什么是视图[2]
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
1.3 视图的好处[3]
(1) 安全性。
一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。
(2) 查询性能提高。
(3) 应对复杂的查询需求。
可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。
(4) 灵活应对需求变更。
有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少修改的效果。这是在实际开发中比较有用的。比如下文的问题案例。
1.4 视图的分类[4]
mysql的视图有三种类型:MERGE、TEMPTABLE、UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。
(1) MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
(2) TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。
(3) UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。
2. 视图的建立和删除[5]
mysql通过create view实现创建视图,语法:
create [algorithm={undifined|merge|temptable}] view view_name [(properties)] as select * [with [CASCADED|LOCAL] check option];
解析:
algorithm是可选参数,表示视图选择的算法,undefined表示mysql自动选择算法,merge表示将使用视图的语句与视图定义合并,使视图的定义部分取代语句的对应部分,temptable表示视图的结构保存到临时表,然后使用临时表执行语句。
view_name表示要创建的视图的名字。
properties是可选参数,指定视图中各属性的名词,默认与select中查询的相同。
select是一个完整的查询语句从某个表中查询某些满足条件的记录并导入视图中。
with check option是可选参数,表示更新视图是要保证在视图的权限范围之内。
视图的更改删除请参看实验部分。
3. 实验
(1) 创建表、插入数据
create table book(
id int(10) not null auto_increment,
name varchar(40) not null,
author varchar(40) not null,
press varchar(40) not null,
price int(4),
primary key (id)
); insert into book(name,author,press,price) values ("mysql_guider","xiao ming", "whu-press", "99");
insert into book(name,author,press,price) values ("python_guider","xiao ming", "whu-press", "100");
insert into book(name,author,press,price) values ("ws_guider","xiao ming", "whu-press", "101");

(2) 创建视图
create view book_view as select name, author from book;
创建成功!
(3) 查看视图
desc book_view;

(4) 使用视图进行查询
select * from book_view;

(5) 使用视图进行插入数据
insert into book_view values ("lol_guider","xiao yang");
插入成功!
select * from book_view;

select * from book;

(6) 使用视图进行更改数据
update book_view set author="xiao ma" where name="ws_guider";
更改成功!
select * from book;

(7) 更改视图
alter view book_view as select name, author, price from book with cascaded check option;
更改成功!
desc book_view;

(8) 删除视图
drop view if exists book_view;

运行成功!
参考:
[1] http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html
[2] http://www.jb51.net/article/36363.htm
[3] http://www.cnblogs.com/lyhabc/p/3801527.html
[4] http://blog.51yip.com/mysql/1062.html
[5] http://www.cnblogs.com/kiwi/archive/2012/11/17/2775228.html
6 MySQL视图的更多相关文章
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
- MySQL视图view/存储过程和函数的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- MySQL视图更新
昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...
- 一个MySQL视图的优化过程
1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...
- mysql视图和临时表的区别
视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...
- MySQL视图(view)
一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...
- 11.Mysql视图
11.视图11.1 什么是视图 视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...
随机推荐
- SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环
原文:SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 上期回顾: SSIS从理论到实战,再到应用(4)----流程控制之For循环 上一期讲了For循环,Foreach循环相 ...
- spring中<tx:advice></tx:advice>是什么意思
<tx:advice id="tv" transaction-manager="transactionManager"> <tx:attrib ...
- 网络资源(10) - Eclipse开发项目
2014_08_26 http://www.360doc.com/content/13/0403/14/11843499_275730704.shtml Eclipse 下搭建struts2开发环境
- 采用RedisLive监控Redis服务
1.基础环境安装https://pypi.python.org/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_h ...
- linux_redhat_线程后台运行方法
建议看完1:后直接看2 screen 方式熟练些可靠. 次方法适用于redhat系统,unbunt* 系统用screen 命令 产看系统版本 cat /proc/version 首先项目制作的sh文件 ...
- Swift中文教程(一)--欢迎来到Swift的世界
原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...
- 【百度地图API】如何制作商圈地图?行政地图?
原文:[百度地图API]如何制作商圈地图?行政地图? 摘要: 想要显示某一个区域,并且鼠标放上去,该区域就会变色.这时,你就需要巧用多边形覆盖物,和它的鼠标事件了! 快来看看去哪儿网的实例吧:http ...
- Cocos2d-x3.0 文件处理
1.从文件中读取 auto sharedFileUtils = FileUtils::getInstance(); std::string ret; sharedFileUtils->purge ...
- JS怎样将拖拉事件与点击事件分离?
帖子:http://bbs.csdn.net/topics/390785395?page=1#post-397369340 怎样将拖拉事件跟点击事件分离? 须要做到:拖拉时不触动点击事件 <ht ...
- 你要知道的C与C++的区别
原文:你要知道的C与C++的区别 如果要说C和C++的区别的话,可能可以列出很多方面出来,但是有许多方面的区别是我们学完这两门语言之后就可以 很好的理解和区分的,比如C是面向过程的一门编程语言,C++ ...