一、视图的介绍
含义:虚拟表,和普通表一样使用。行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。(mysql5.1版本出现的新特性,是通过表动态生成的数据)
应用场景:多个地方用到同样的查询结果 或者 该查询结果使用的sql语句比较复杂。
类比生活中实际的例子来说,视图和普通表的区别就像临时组件的表演班和正常上课的班级之间的区别。
-- 案例:查询姓张的学生名和专业名(传统写法)
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.majorid=m.id
WHERE s.stuname LIKE '张%';
-- 添加视图
CREATE VIEW v1
AS
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.majorid=m.id;
SELECT * FROM v1 WHERE stuname LIKE '张%';
二、视图的创建、修改、删除和查看
创建语法:CREATE VIEW 视图名 AS 查询语句;
修改语法:
方式一: CREATE OR REPLACE VIEW 视图名 AS 新的查询语句;
方式二: ALTER VIEW 视图名 AS 新的查询语句;(类似于表修改)
删除语法: DROP VIEW 视图名1,视图名2,...... ;
查看语法: DESC 视图名;
三、视图的好处
(1)重用sql语句
(2)简化复杂的sql操作,不必知道它的查询细节
(3)保护数据,提高安全性
四、视图的更新
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;
SELECT * FROM myv1;
(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)包含以下关键字的sql语句:分组函数、DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL
(2)常量视图
(3)SELECT中包含子查询
(4)JOIN
(5)FROM一个不能更新的视图
(6)WHERE子句的子查询引用了FROM子句中的表
六、视图和表对比
创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
视图 | CREATE VIEW | 只保存了sql逻辑 | 增删改查,只是一般不能增删改 |
表 | CREATE TABLE | 保存了数据 | 增删改查 |