本部分主要讲解mysql数据库中的进阶知识和实际操作3:视图。
一、视图简介
1.视图概念:
- 查出来的结果保存一下,就是一个视图:
2.视图的特性:
- 视图数据都是基于基表的,基表变,视图变;
- 视图多用于给客户看,这样客户改不了原始数据;
3.视图的作用:
- 提升性能,是因为之前有些限制条件salary>2000的已经创建好了,不用再查,直接在这个视图上操作;
二、视图创建/修改/删除
2.1 创建视图
2.1.1 视图和表都是数据库对象
- 创建好之后,在这里查看视图:
- 再直接从视图取数:【就不用再写复杂的查询;提高查询效率;数据比较独立】
2.1.2 创建不同的视图【视图名称应该不同】
- 建议先写视图的select的部分
2.1.3 修改视图名称
2.1.4 创建视图的其他参数
- 加上参数:with check option
- 运行结果:
- 此时再从视图中取数据【上面给的参数不同,取数的机制不同】:
2.3 视图机制
- 替代式:写的东西到时候会在内部被转成SQL语句
创建的视图是emp_s_v,又写了select * from emp_s_v,内部相当于是这样运行的select * from (select * from emp where salary >2000) t ;
- 具化式:内部是先得到>2000的数据表放在内存,再外层from是从内存的表里取的
2.4 具体讲解每个参数
- 参数添加的位置:光标处
merge:处理方式替代式,可以直接更新真实表中的数据;
你改了视图里的数据,真实表里的数据也会更改;
- temptable: 具化式,由于数据存在临时表中,所以不可进行更新操作
最后一句是指,undefined是一步到位直接继续拿
2.5 总结
- 运行了上图语句,更新视图时,这个数据必须是大于2000的
三、视图不可更新部分【只要视图中的数据不是直接来源于基表,就不能直接修改,如:运算后的数据】
3.1可以更改的部分
- 此时去改视图的数据,原表的数据也更改了,因为用了merge关键字,但是也有一些不能改的部分
3.2 不可更改的例子
- 生成的avg就不能改: