mysql 视图
那随意了 • 2020 年 06 月 02 日
视图
简介
定义
视图是一个虚拟的表,其内容有查询定义.同真实的表一样,视图包含一些力带有名称的列和行数据.行和列的数据来自定义视图查询所引用的表,并且在引用视图时动态生成,
简单的来说视图时有select结果组成的表
特性
视图时对于若干张基表的引用,一张虚表,查询语句执行的结果
不存储具体的数据(基表发生了改变,视图也会跟着改变)
可以和基本表一样,进行增删改查的操作(有条件限制)
作用
提高了安全性,查询性能,提高了数据库独立性
查询的数据源来自不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据源不同带来的差异
操作create view 视图名 as (查询语句)
#例子
create view table_view as (select * from table);
之后查询就可以直接select * from table_view
修改视图内容create view table_view as (select * from table where id=1);
删除视图drop view table_view
查询机制
创建视图create [algorithm]={undefinde|merge|temptable}]
view 视图名称[(属性清单)]
as select语句
[with[cascaded|local]checkoption];
algorithm参数merge:使用替换式,可以进行更新真实表中的数据
temptable:具化式,数据存在临时表中无法更新真实数据
undefined:没有定义algorithm参数,mysql更加倾向于选择替换式
with check option:更新时不能插入或更新不符合视图限制的记录
local和sascaded:为可选参数,决定了检查测试的范围,默认值为cascaded
视图机制
替代式:操作视图时,视图名直接被视图定义给替换掉
具化式:先处理视图结果,在内存中形成一个临时表,后处理外面的查询需求
视图不可更新部分
只要数据不是来自基表的都不可更新,如:聚合函数
distinct关键字
group by 字句
having字句
union字句
union运算符
from字句中包含多个表
select语句汇总引用了不可更新视图