视图
含义:理解成一张虚拟的表
mysql5.1版本出现的新特性,是通过表动态生成的数据。
比如:一个班级有一群舞蹈比较好的,组成一个舞蹈班,当领导来视察的时候,就把这个舞蹈班拿出来表演,平时舞蹈班的同学还是当作普通同学使用。
视图是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。
应用场景:
- 多个地方用到相同的查询结果;
- 改查询结果使用的sql语句较复杂。
视图和表的区别:
关键字 使用方式 占用物理空间
视图 view 完全相同 不占用,仅仅保存的是sql逻辑
表 table 完全相同 占用
视图的好处:
1、sql语句提高重用性,效率高;
2、和表实现了分离,保护数据,提高了安全性;
3、只提供给对方需要的关键信息,而原始表中的数据不让人知道。
视图逻辑的创建
#语法:
CREATE VIEW 视图名
AS
select 查询语句;
#实战,就像给某个select操作取名一样!类似于mybatis的关联查询
create view my_v1
as
select studentname,majorname
from student s;
inner join major m
on s.majorid=m.majorid
where s.majorid=1;
视图逻辑的修改
视图名重复就直接覆盖!!!!!
/******** 方式一 ********/
# 语法:
# create or replace view 视图名
# as
# select 查询语句;
#应用
create or replace view my_v1
as
select avg(salary),job_id
from employees
group by job_id;
/******** 方式二 ********/
#语法:
# alter view 视图名
# as
# select 查询语句;
#应用
alter view my_v1
as
select * from employees;
视图逻辑的删除、查看
#语法:drop view 视图名,视图名,...;
drop view my_v1,my_v2,my_v3;
#查看视图结构
desc my_v1;
show create view my_v1;#比较全,包括语句
show create view my_v1\G;#\G格式化一下
在平时使用的时候,视图可以当作表直接处理,比如join连接之类的。
视图的更新,增删改查
通常我们会给视图添加权限,只允许读,不允许写。
#1、使用视图的数据 ★可以把视图当成一个表来使用
SELECT * FROM my_v1;
SELECT * FROM my_v1 WHERE last_name='Partners';
#2、插入视图的数据(原始表也有!)
INSERT INTO my_v4(last_name,department_id) VALUES('虚竹',90);
#3、修改视图的数据(原始表同时更改!)
UPDATE my_v4 SET last_name ='梦姑' WHERE last_name='虚竹';
#4、删除视图的数据
DELETE FROM my_v4;
某些视图不能更新
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
- 常量视图
- Select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表