mysql实验6视图_6 MySQL视图

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) 创建表、插入数据

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

create tablebook(

idint(10) not nullauto_increment,

namevarchar(40) not null,

authorvarchar(40) not null,

pressvarchar(40) not null,

priceint(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");

View Code

91780a3d2042ec7375e16cf73f3cde92.png

(2) 创建视图

create view book_view as select name, author from book;

创建成功!

(3) 查看视图

desc book_view;

061c283d1c6d79af97f53cfbf3760b5f.png

(4) 使用视图进行查询

select * from book_view;

3ee6413fa86b14bec0c445980db3b810.png

(5) 使用视图进行插入数据

insert into book_view values ("lol_guider","xiao yang");

插入成功!

select * from book_view;

7bc7554bb42ff39f87b2412356ff1274.png

select * from book;

026e904dea9f9e902daf13f18b78f66d.png

(6) 使用视图进行更改数据

update book_view set author="xiao ma" where name="ws_guider";

更改成功!

select * from book;

ebea09873552721ce76f235c5cb8e060.png

(7) 更改视图

alter view book_view as select name, author, price from book with cascaded check option;

更改成功!

desc book_view;

f5067e0f64e6eb201bbfec2968d69a29.png

(8) 删除视图

drop view if exists book_view;

ab008b95608466ce258ebd452411d5d4.png

运行成功!

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值