详细讲解MYSQL视图的作用及优缺点
一、概念
1.视图是MySQL在5.0.1版本中加入的功能。它可以理解为一个虚表。
2.之所以被称为虚表,是因为它只是存储了一个结构,并不存储真实的数据。行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
3.视图并不是真的优化
二、创建一个视图
--创建视图的语法:create view 视图名称 as select语句;
--创建一个视图:create view user_view as select id,name,age,sex from user;
三、查看视图
查看视图的方式和表一样可以通过select来查看,desc查看视图结构
--查看视图结构:desc user_view; show create view user_view;
--查看视图内容:select * from user_view;
四、视图的优点
1.第一个显著优点就是它简化了操作。此时我们完全不用关心视图是怎么处理数据的,我们只需要知道如何使用这个结果集即可,视图相当于一个中间层。
2.第二个显著优点就是它更加安全。比如我们可以让用户有权去访问某个视图,但是不能访问原表,这样就可以起到保护原表中某些数据的作用。
3.我们之后会接触到管理权限,权限是无法细致到某一个列的,通过视图,则很容易实现。
4.第三个显著优点就是降低耦合。假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响的,一般来说,这样代价会更小。
五、视图的缺点
1.性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
2.表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。
六、视图的UID
表的数据是可以修改与更新的,但是在视图就不一定了。
--修改视图字段的值会直接修改到源数据表:update `user_view` set name='小哈' where id=1; select * from `user`;
--删除视图:drop view user_view;
以下是视图不可更新的情况:
1.包含聚合函数、distinct、groupby、having、union、unionall。
2.常量视图。
3.select包含子查询。
4.包含连接操作。
5.from一个不能更新的视图。
6.where子句的子查询引用了from子句中的表。
评论列表