一、视图介绍
(1)定义
一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
(2)应用场景
- 多个地方用到同样的查询结果。
- 该查询结果使用的sql语句较复杂。
(3)使用视图的优点
- 重用sql语句
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
- 使用表的一部分而不是整个表。
(4)视图仅仅是用来查看存储在别处的数据的一种措施
-
视图本身不包含数据,因此它返回的数据是从其他表中检索出来的。在添加或改变这些表中的数据时,视图将返回改变后的数据。
-
性能问题:因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。若创建了过于复杂的视图,可能会导致性能严重下降。
(5)视图的规则和限制
-
与表一样,视图必须唯一命名。(不能取与别的视图或表相同的名字)
-
视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图
-
为了创建视图,必须有足够的访问权限。
二、视图的使用
1.视图的使用
(1)创建视图
CREATE VIEW 视图名
AS
查询语句;
(2)查看视图的数据
SELECT * FROM 视图名;
SELECT * FROM 视图名 WHERE last_name='Partners';
(3)修改视图
方式一:
CREATE OR REPLACE VIEW 视图名 //若视图存在就修改,若不存在就创建
AS
查询语句;
方式二:
ALTER VIEW test_v7
AS
查询语句;
(4)删除视图
DROP VIEW 视图名1,视图名2...; //被删除的视图需要有删除权限
(5)查看视图
SHOW CREATE VIEW 视图名;
(6)视图的更新(修改视图中的数据)
**注:**具备以下特点的视图不能更新
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all。
- 常量视图
- Select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
三、视图与表的对比
使用方式(创建、删除等) | 是否占用屋里空间 | 使用 | |
---|---|---|---|
视图 | 完全相同 | 不占用,仅仅保存的是sql逻辑 | 增删改查(一般不能增删改) |
表 | 完全相同 | 占用,保存了数据 | 增删改查 |