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语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...
随机推荐
- Swift_3_功能
import Foundation println("Hello, World!") //声明函数 不带参数 无返回值 func func1(){ } //一个函数 传入两个Str ...
- hdu 3068 最长回文(manachar模板)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
- 35,000FT大气压力的问题
原来的问题:压力在喷气客机的飞行FL350(35,000脚)大约210mmHg.这是个大气压的数量? 在每平方英寸磅? 多少帕斯卡尔? http://wenwen.sogou.com/z/q33797 ...
- JAVA转让JS功能
今天,在发展中使用js和Java互动.通常我们使用更多的是js转让Java方法.可以使用dwr.Ajax.jquery.突然发现Java转让js然后,我真的没见过,今天,互联网提供以下信息,顺便总结: ...
- C语言星号的秘密
C语言星号的秘密 星号的秘密 1.乘法运算符 2.定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int ...
- HDU 1102 Constructing Roads, Prim+优先队列
题目链接:HDU 1102 Constructing Roads Constructing Roads Problem Description There are N villages, which ...
- 只有有lua编译能力不足200K代码吧?NO! Python 有可能。
如今Python给人的感觉是大,东西多,在Windows上安装后竟然要占100多兆的空间. lua给人的感觉是非常小,非常轻便.Python 2.7在linux下编译出来的代码在strip之后也有3M ...
- 转载使用Flurl制作可复用的分页组件
使用Flurl制作可复用的分页组件 使用ASP.NET MVC查询时,一直使用MvcPaging组件,虽然需要自定义MvcPaging.Pager才能达到我想要的效果,但在没有较好的URL库时,还是这 ...
- Git@OSC & SSH配置
#### [ 导入外部Git仓库到中国源代码托管平台(Git@OSC)] 免费代码托管 您可以通过SSH或者HTTP的方式提交和管理代码,也可以通过Web的方式在线阅读,编辑代码与Team@OSC的集 ...
- spark in eclipse---Spark学习笔记3
想要调试源码,还是要放到eclipse里面去.先生成eclipse项目,下载依赖包 victor@victor-ubuntu:~/software/incubator-spark-0.8.1-incu ...