SQL视图
本文首先谈一下视图的含义和应用场景,之后对视图的创建、修改、删除、查看和更新进行讲解,最后对比了视图和表的异同。
含义:
视图是MySQL 15.1 版本出现的新特性
- 视图是动态生成的,系统中只保存了视图的SQL逻辑,不保存查询结果
- 视图是一张虚拟表,但可以像使用普通表一样使用视图;
应用场景:
- 当多个地方都用到相同的查询结果时
- 当该查询结果使用的SQL语句较复杂时
一、创建视图:
语法:
CREATE VIEW 视图名
AS
查询语句
案例:
两张表学生表stuinfos 和 专业表major
查询姓张的学生姓名和专业名
SELECT stuname, majorname
FROM stuinfos s
INNER JOIN major m ON s.majorid = m.id
WHERE s.stuname LIKE '张%'
如果查询学生姓名和对应的专业名很常用,那么可以将之封装起来,创建视图:
CREATE VIEW v1
AS
SELECT stuname, majorname
FROM stuinfos s
INNER JOIN major m ON s.majorid = m.id
使用试图查询 张同学的信息
SELECT *
FROM v1
WHERE stuname LIKE '张%'
二、视图的修改
修改在这里的意思是整个视图的修改,注意和第五大点的视图更新意思不一样
方式一
CREATE OR REPLACE VIEW 视图名
AS
查询语句
方式二
ALTER VIEW 视图名
AS
查询语句
三、删除视图
语法:
DROP VIEW 视图1,视图2,..;
四、查看视图
方式一:
DESC v1;
方式二:
SHOW CREATE VIEW v1;
五、视图的更新
这里的视图更新是指对局部信息的更新
视图的可更新性和视图中的查询定义有关系,以下类型的视图是不能更新的:
- 包含以下关键字的SQL语句:分组函数,
DISTINCT, GROUP BY, HAVING, UNION 或UNION ALL
- SELECT中包含子查询
- JOIN
- FROM 一个不能更新的视图
- WHERE子句的子查询引用了FROM子句的表
六、视图和表的对比
创建语法的关键字 是否实际占用物理空间 是否可以增删改查
视图 CREATE VIEW 只保存了SQL逻辑 一般不可以增删改
表 CREATE TABLE 是 增删改查