12-MySQL视图

随着基础知识的不断深入,我们会渐渐发现一些有趣的概念,觉得:欸,不错欸,好想继续听下去.保持这种想法,继续前行,你会发现知识不仅仅是纸上谈兵

image.png

一.视图-基本概念

image.png

image.png

image.png

image.png

image.png

1.视图基本概念
- 视图仅仅是表的结构, 没有表的数据
- 视图的结构和数据是建立在表的基础上的
- 视图中保存了一张表或者多张表的部分或者所有数据
2.视图的作用:
- 视图可以用来简化SQL语句
+ 例如 表中有id,name,age,gender,score, 我们需要查询id,name,gender
+ select id,name,gender from stu;
+ 如果在表的基础上创建了一个包含id,name,gender的视图
+ select * from stu_view;
- 视图可以用来隐藏表的结构
+ 表中有id,name,age,gender,score, 视图中有id,name,gender
+ 那么外界在使用视图的时候就不知道表中还有age和score
By 极客江南

二.视图-常规操作

image.png

image.png

image.png

image.png

3.创建视图语法
create view 视图名称 as select 语句;
示例一:
select name,city from stu;
create view stu_view as select name,city from stu;
select * from stu_view;
注意点:
视图仅仅是表的结构, 没有表的数据
视图是建立在表的基础上的, 如果修改视图中的数据本质上是修改了表中的数据
#由于视图不保存数据, 本质上数据是插入到了表中
insert into stu_view values('yyyy', '武汉');
#由于视图不保存数据, 本质上修改的是表中的数据
update stu_view set city='杭州' where name='ww';
#由于视图不保存数据, 本质上删除的是表中的数据
delete from stu_view where name='ww';
示例二:
#在多表查询的时候, 如果需要显示重复字段, 必须在字段名称前面加上表名
select * from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
select stuinfo.stuid, name, score from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
create view studes_view as select stuinfo.stuid, name, score from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
更改视图
alter view 视图名称 as select 语句;
create view stu_view as select name,city from stu;
# 修改视图返回的结果
alter view stu_view as select name,age,city from stu;
删除视图
drop view [if exists] 视图名;
drop view if exists stu_view;
By 极客江南

三.视图-视图算法

image.png

image.png

image.png

select * from (select * from stu order by score desc) as t group by city;
#将子查询封装到视图中去
create view order_view as select * from stu order by score desc;
#用视图替代子查询
select * from order_view group by city; #结果出现了误差
视图算法
- merge: 合并算法, 将视图的语句和外层的语句合并之后再执行
- temptable: 临时表算法, 将视图生成一个临时表, 再执行外层的语句
- undefined: 未定义, 由MySQL自己决定使用如上的哪一种算法, 默认就是undefined
+ 由于合并算法的效率比临时表算法效率高, 所以MySQL一般会选择合并算法
- 如上案例中导致数据混乱的原因就是因为默认使用了合并算法
#将子查询封装到视图中去
# algorithm=temptable指定视图的算法
create algorithm=temptable view order_view as select * from stu order by score desc;
#用视图替代子查询
select * from order_view group by city;
By 极客江南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,150评论 0 0
  • 1.数据库简介 人类在进化的过程中,创造了数字、文字、符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,...
    大熊_7d48阅读 569评论 0 1
  • 在网上看见一则新闻,标题“杭州媳妇给婆婆写了一封信:您儿子就是永远长不大的妈宝男”。信中媳妇讲述自己为家庭...
    bigbigivy阅读 466评论 0 1
  • 焚星录 这个世界远比你想象的要复杂得多。 很久以前,宇宙还在处于混沌状态时,没有星球,没有生灵,亦没有战争的硝烟。...
    刘三_b163阅读 444评论 0 2