含义:

  • 只保存了sql逻辑,不保存查询结果
  • 虚拟表,和普通表一样使用mysg15.1版本出现的新特性,是通过表动态生成的数据

应用场景:

  • 多个地方用到同样的查询结果
  • 该查询结果使用psl语句较复杂

一、创建视图

格式:
create view 视图名
as
查询语句;

  1. #1、查询姓名中包含a字符的员工名、部门名和工种信息
  2. CREATE VIEW myv1
  3. AS
  4. SELECT last_name,department_name,job_title
  5. FROM employees e
  6. JOIN departments d ON e.department_id=d.department_id
  7. JOIN jobs j ON j.job_id=e.job_id;
  8. #2、使用
  9. 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子句中的表