一、概念

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子句中的表。

Logo

更多推荐