4 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

时间: 2024-10-01 02:38:20

4 mysql视图的相关文章

7Python全站之路系列之MySQL视图

Python全栈之路系列之MySQL视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,并可以将其当作表来使用. 创建视图 创建一个名称为v1的视图,其功能就是查询color表中的所有数据 CREATE VIEW v1 AS SELECT * FROM color; 查看视图 使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建.更新和删除操作,仅能做查询用. select * from 

第11章 mysql 视图

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] mysql视图学习总结 [6] mysql之视图 [7] mysql之视图详解

八、mysql视图、存储过程、函数以及时间调度器

1.create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 2.drop view emp_view 删除视图 ======================================= 1.创建一个存储过程(查询所有数据) create procedure p1 () READS SQL DATA BEGIN select * from t4; END 2.创建一个存储过程(查询传参数据) cre

MySQL视图view/存储过程和函数的使用

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC Semibold"; color: #454545 } p.p3 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px

深入解析MySQL视图view

阅读目录---深入解析MySQL视图 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌套视图 定义视图时的其他选项:algorithm.definer.SQL security 视图查询语句的处理 替代方法 具体化方法 Q:什么是视图?视图是干什么用的? A: 视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据.作为一个select语句保存在数据字典中的. 通过视图,可以展现

MySQL视图概述

1.介绍 在传统关系型数据库里,视图有时也被称作虚表,是基于特定SQL结果集的虚拟数据表.在有些场合会变得很方便,例如:原有系统重构,旧的数据表A和B已经被拆分和合并到数据表C.D.F里面,为了实现平滑迁移不影响对外数据业务,可以分别创建和原有数据表A和B一致的视图G和H,再实现数据层升级,不影响现有业务. 2.创建 创建MySQL视图语法如下 CREATE [ALGORITHM=[UNDEFINED | MERGE | TEMPTABLE] ] [DEFINER=用户名] [SQL SECUR

MySQL 视图使用初探

<一> 视图 1.优点 视点集中 简化操作 定制数据 合并分割数据 安全性 2.为什么需要视图? 视图是存储在数据库中的查询的sql 语句,它主要出于两种原因: 安全原因,视图可以隐藏一些数据,如社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等, 可使复杂的查询易于理解和使用. 3.创建视图的语法 CREATE VIEW view_name      AS         SELECT column_name(s)         FROM table_name    

Mysql视图的作用及其性能分析

定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. 3.视图对重构数据库提供了一定程度的逻辑独立性. 数据的逻辑独立性是指:如增加新的关系或对原有的关系增加新的 字段,用户的应用程序不受影响. 例如:原有一个Student(Sno,Sname,Ssex,Sage,Sdept)这样一个表. 后来变动为:Sx(Sno,Sname,Sage)和SY(Sno

MySQL 视图知识点小结

视图本身是一个虚拟表,不存放任何数据.在使用SQL语句访问视图的时候,它返回的数据是MySQL从其他表中生成的.视图和表在同一个命名空间, MySQL在很多地方对于视图和表是同样对待的.不过视图和表也有不同.例如,不能在视图上创建触发器,也不能用DROP TABLE命令删除视图. 视图的实现算法: 合并算法:merge 临时表算法:tmptable 可更新视图(updatable view):可以通过更新视图来更新视图涉及的相关表. 如果视图定义中包含了group by .union.聚合函数.

MYSQL视图的学习笔记

MYSQL视图的学习笔记,学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使用视图就可以不用看到数据表中的所有数据,而是只想得到所需的数据. 在数据库中,只存放了视图的定义,并没有存放视图的数据,数据还是存储在原来的表里,视图的数据是依赖原来表中的