什么是视图:
视图是一个虚拟表,其内容由查询定义
同真实的表一样,视图包含一系列带有名称的列和行数据
行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成
简单的说视图是由select结果组成的表
视图的特性:
视图是对若干张基本表的引用,一张虚表,查询语句执行的结果
不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)
可以跟基本表一样,进行增删改查操作(增删改操作有条件限制)
视图的作用:
安全性
创建一个视图,定义好该视图所操作的数据,之后将用户权限与视图绑定这样的方式是使用到了一个特性:grant
语句可以针对视图进行授予权限
查询性能提高
提高了数据的独立性
视图机制
替换式 将视图公式替换后,当成一个整体sql语句进行处理
具化式 先处理视图结果,后处理外面的查询需求
创建视图
create view 视图命名 as (select 查询结果);
完整过程如下:
CREATE [ALGORITHM] = {UNDEFINED|MERGE|TEMPTABLE}
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM 参数
merge
处理方式替换式,可以进行更新真实表中的数据, 视图数据更改,基表数据也会改,但有些情况不能改
TEMPTABLE
具化式,由于数据存储在临时表中,所以不可以进行更新操作
UNDEFINED
没有定义 ALGORITHM 参数,MYsQL更倾向于选择替换方式,因为更高效
将如下查询语句查询的结果作为视图
WITH CHECK OPTION
更新数据时不能插入或更新不符合视图限制条件的记录
SELECT * FROM emp WHERE salary > 2000;
CREATE VIEW emp_salary_view AS (SELECT * FROM emp WHERE salary > 2000);
CREATE ALGORITHM = MERGE VIEW emp_salary2 AS (SELECT ename,salary FROM emp);
基于视图查询内容
SELECT * FROM emp_salary_view WHERE job='经理';
更新视图
CREATE OR REPLACE VIEW 新视图名 AS (SELECT查询结果);
删除视图
drop view 视图名称;
视图不可更新部分
聚合函数
DISTINCT 关键字
GROUP BY 子句
HAVING 子句
UNION 子句
FROM 子句中包含多个表
SELECT 语句中引用了不可更新视图
只要视图当中的数据不是来自基表,就不能直接修改