12 视图
视图:虚拟表,和普通表一样使用。数据库中只存放了视图的定义,并没有存放视图中的数据。本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需要使用名称即可获取结果集,并可以将其当做表来使用。
视图和表的对比:
| 创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
| 视图 | create view | 只是保存了sql逻辑 | 增删改查,只是一般不能增删改 |
| 表 | create table | 只保存了数据 | 增删改查 |
举个例子:
当不用视图调用时,
SELECT * FROM (SELECT * FROM student WHERE gender='男') AS A WHERE A.class_id>1;
但是当有很多查询需要用到上面的临时表进行查询,工作量就会大很多。此时,可以使用视图,
--1.创建视图 CREATE VIEW tb1 AS SELECT * FROM student WHERE gender='男'; --2.使用视图进行查询 SELECT * FROM tb1 WHERE class_id>1;
一、创建视图
CREATE VIEW 视图名 AS 查询语句;
二、修改视图
--方式一 ALTER VIEW 视图名 AS 查询语句; --方式二 CREATE OR REPLACE VIEW 视图名 AS 查询语句;
三、删除视图
DROP VIEW 视图名1,视图名2,...;
四、查看视图
DESC 视图名;
或
SHOW CREATE VIEW 视图名;
五、更新视图:插入、修改和删除
示例:创建一个很简单的视图
CREATE OR REPLACE VIEW myv1 AS SELECT last_name,email FROM employees;
1. 插入
INSERT INTO myv1 VALUES('张飞','zf@qq.com');
使用像更新表一样的语句来更新视图,会更改原始表。
2. 修改
UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';
3. 删除
DELETE FROM myv1 WHERE last_name = '张无忌';
修改、删除和插入同理,都会在更新视图的同时更新原始表。
以下不允许更新视图:
1. 包含分组函数及DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL。
2. 常量视图。
3. Select中包含子查询。
4. JOIN
5. WHERE后面的子查询引用了FROM中的表。
6. 用到了不可更新的视图。

浙公网安备 33010602011771号