MySQL 从 5.0.1 版本开始提供视图功能。视图时一种虚拟存在的表,行和列的数据来自于视图的查询中使用的表,并且在使用视图时动态生成,只保存了 sql 逻辑,不保存查询结果。
理解:比如我现在做一个业务,是关联到多张表的,这个时候我要把查询的结果放在同一张虚拟表中。视图就是这么一张虚拟表,但是视图存储的不是这张表查询的数据,而是查询的逻辑过程,当数据发生改变时,视图中的数据也会相应的发生改变。其实视图就是对 sql 进行了保存,使用视图的过程就是执行存储好的 sql 的过程。
应用场景:
语法:
CREATE VIEW 视图名字AS查询语句;
实例:
CREATE VIEW myview1ASSELECT 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;
视图的使用:
SELECT * FROM myview1 WHERE last_name LIKE '%a%';
和普通表的使用没有任何区别
视图的好处:
方式一:如果视图不存在就创建,如果存在就修改
CREATE OR REPLACE VIEW 视图名AS查询语句;
方式二:直接修改
ALTER VIEW 视图名as查询语句;
9.3 删除视图
DROP VIEW 视图名1,视图名2,...;
9.4 更新视图
实例1:更新视图
CREATE OR REPLACE VIEW myv1ASSELECT last_name,email,salaryFROM employees;SELECT * FROM myv1;
实例2:向视图中插入数据
INSERT INTO myv1 VALUE('张飞','780574861@qq.com',1200);
实例3:修改视图中的数据
UPDATE myv1SET last_name='张无忌'WHERE last_name = '张飞';
实例4:删除视图
DELETE FROM myv1 WHERE last_name = '张无忌';
特点:
- 可以操作普通表的语句也同样可以操作视图
- 在对视图中的数据进行修改的同时,也会对视图相关的表中的数据进行修改
- 视图中的数据不是都能修改成功,如果字段具备如下特点,就不能进行修改了
- 包含:分组函数、distinct、group by、having、union、union all
- 常量视图
- select 中包含子查询
- join(可以修改,不能删除和插入)
- from 一个不能更新的视图
- where 子句的子查询引用了from子句中的表
