学习地址:
撩课 - Javaweb 系列 1 之基础语法 - 前端基础
撩课 - JavaWeb 系列 2 之 xml
撩课 - JavaWeb 系列 3 之 MySQL
撩课 - JavaWeb 系列 4 之 JDBC
撩课 - JavaWeb 系列 5 之 Web 服务器 - idea
什么是视图
视图是一个虚拟表,
其内容由查询定义.
同真实的表一样,
视图包含一系列带有名称的列和行数据.
行和列数据来自定义视图的查询所引用的表,
并且在引用视图时动态生成.
简单的来说视图是由 select 结果组成的表;
视图的特性
视图是对若干张基本表的引用,
一张虚表, 查询语句执行的结果,
不存储具体的数据
(基本表数据发生了改变, 视图也会跟着改变);
可以跟基本表一样,
进行增删改查操作 (增删改操作有条件限制);
视图的作用
安全性
创建一个视图,
定义好该视图所操作的数据.
之后将用户权限与视图绑定
这样的方式是使用到了一个特性:
grant 语句可以针对视图进行授予权限.
查询性能提高.
提高了数据的独立性
创建视图
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM 参数
merge
处理方式替换式, 可以进行更新真实表中的数据;
TEMPTABLE
具化式,
由于数据存储在临时表中, 所以不可以进行更新操作!
UNDEFINED
没有定义 ALGORITHM 参数
MySQL 更倾向于选择替换方式. 是因为它更加有效.
WITH CHECK OPTION
更新数据时不能插入或更新不符合视图限制条件的记录.
LOCAL 和 CASCADED
为可选参数,
决定了检查测试的范围,
默认值为 CASCADED.
修改视图
CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
删除视图
drop view 视图名称;
视图机制
替换式
操作视图时,
视图名直接被视图定义给替换掉
具化式
MySQL 先得到了视图执行的结果,
该结果形成一个中间结果暂时存在内存中.
外面的 select 语句就调用了这些中间结果 (临时表)
替换式与具化式区别
替换方式, 将视图公式替换后, 当成一个整体 sql 进行处理了.
具体化方式, 先处理视图结果, 后处理外面的查询需求.
视图不可更新部分
聚合函数;
DISTINCT 关键字;
GROUP BY 子句;
HAVING 子句;
UNION 运算符;
FROM 子句中包含多个表;
SELECT 语句中引用了不可更新视图;
只要视图当中的数据不是来自于基表,
就不能够直接修改
来源: http://www.jianshu.com/p/b9d9d79380ea