【编程学习】关于SQL视图我们需要了解什么

视图要点

视图是一种虚拟存在的表,并且是动态生成的,只保存了SQL逻辑,不保存查询结果,它具有以下的一些特征:

  • 虚拟表、和普通表一样使用
  • 临时性:临时组建的表格,
  • 可以重复利用

当我们遇到多个地方用到同样的查询结果或者该查询结果使用的SQL语句较复杂等情况时,我们就可以用视图来处理。

由此很容易让我们产生思考,既然视图并不保存数据,当我们修改视图中的数据时,会发生什么?

先来说结论:更新视图里面的数据,视图的更新实际上是对基本表增加或者删除记录一般情况下都不建议对视图进行操作。

不管是update、delete还是insert,在常规情况下的修改都会直接修改原表中的数据,但是有一些特殊情况:

  • 比如原表t有一列:column,在视图中,我们就create view v1 as select column c1, column c2 from t;此时v1中,有c1、c2两列全部对应原表的column列,此时如果insert(100,200),插入不一致的列,会有冲突导致插入失败。

总之,会导致数据不满足表定义限制时的修改就会失败。

其他不可更新的视图类型

视图的可更新性和视图中查询的定义有关系,以下6种类型的视图不可更新:

  1. 包含:分组函数,distinct,group by, having, union, union all
  2. 常量视图:select ‘john’ name;
  3. select 中包含子查询
  4. select 中包含 join
  5. select from一个不能更新的视图
  6. where子句的子查询引用了from子句中的表