含义:
- 只保存了sql逻辑,不保存查询结果
- 虚拟表,和普通表一样使用mysg15.1版本出现的新特性,是通过表动态生成的数据
应用场景:
- 多个地方用到同样的查询结果
- 该查询结果使用psl语句较复杂
一、创建视图
格式:
create view 视图名
as
查询语句;
#1、查询姓名中包含a字符的员工名、部门名和工种信息CREATE VIEW myv1ASSELECT last_name,department_name,job_titleFROM employees eJOIN departments d ON e.department_id=d.department_idJOIN jobs j ON j.job_id=e.job_id;#2、使用SELECT * FROM myv1 WHERE last_name LIKE '%a%';
优点:
- 重用sql语句
- 简化复杂的sq操作,不必知道他的查询细节
- 保护数据,提高安全性
二、视图的修改
格式一:
create or replacce view 视图名
as
查询语句;
CREATE OR REPLACE myv2
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;
格式二:
alter view 视图
as
查询语句;
三、删除视图
- DROP VIEW myv1,myv2…;
四、查看视图
- DESC myv3
- SHOW CREATE VIEW myv3;
五、视图的更新
#好像都不行
#1、插入
INSERT INTO myv1 VALUES('张飞','sjb@qq.com',1000000);
INSERT INTO myv1 VALUES('张飞','zf@qq.com');
#2、修改
UPDATE myv1 SET last_name='张无忌' WHERE last_name='张飞';
#3、删除
DELETE FROM myv1 WHERE last_name = '张无忌';
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的
- 包含以下关键字的sgl语句:分组函数、distinct, group by,having, union或者union alll
- 常量视图
- select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
