1. 概述
-
概念:视图:是一种虚拟表,但可以和普通表一样使用
视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上
例如可以将查询结果的虚拟集封装成视图,下次再需要查询同样数据时就不用再写查询,直接使用视图就行了,因此视图具有临时性
-
存储:视图没有物理结构空间,只保存了SQL逻辑,类似于java中封装的函数
-
使用:视图支持增删改查操作,但一般我们不使用(限制太多)
-
好处:
提高重用
简化代码
保护数据,提高数据库安全性
2. 视图的创建
语法:
CREATE VIEW name
AS
查询语句;
3. 视图的删除
语法与表的删除一致,只是将table改为view:
DROP VIEW [IF EXISTS] 视图名1,视图名2,...;
4. 视图的修改
对于视图的修改其实就是对创建视图的查询语句的修改,有以下俩种方式:
方式一:
CREATE OR REPLACE VIEW 视图名
AS
查询语句;
-- 意思是如果视图存在就修改,不存在则创建视图
方式二:
ALTER VIEW 视图名
AS
查询语句;
5. 视图的CRUD
5.1 查看视图
这里的查看不是查看视图数据(查看数据直接按照表的查询规则查询即可)
而是查看视图的结构,语法与查看表的结构一致:
-- 语法
-- 查看视图的结构
DESC 视图名;
-- 查看视图的创建过程
SHOW CREATE VIEW 视图名;
-- 查询结果例:
-- 创建视图a
CREATE VIEW a
AS
SELECT * FROM test;
-- 查询创建过程:
SHOW CREATE VIEW a;
-- 结果:
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `a` AS select `test`.`Sno` AS `Sno` from `test`
查看视图的结构:
从 MySQL 5.1 版本开始,使用 SHOW TABLES 命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存在单独显示视图的 SHOW VIEWS 命令。
5.2 视图的更新
即增删改操作,同样与操作表一致:
-- 增
INSERT INTO 视图名(列1,列2,...) VALUES(值1,值2,..);
-- 删
DELETE FROM 视图名 WHERE ...;
-- 改
UPDATE 视图名 SET 字段=新值,... WHERE ...;
但是具有以下特点的视图不能更新
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
- 常量视图
- Select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
也因此由于限制条件太多一般不对视图进行增删改操作