视图

简介

定义

视图是一个虚拟的表,其内容有查询定义.同真实的表一样,视图包含一些力带有名称的列和行数据.行和列的数据来自定义视图查询所引用的表,并且在引用视图时动态生成,

简单的来说视图时有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语句汇总引用了不可更新视图
Last modification:November 17, 2023
如果觉得我的文章对你有用,请随意赞赏