视图从其所基于的表中导出其数据,称为基表。基表可以是表或其他视图。在视图上执行的所有操作实际上都会影响基表。您可以在大多数使用表的地方使用视图。

说明

物化视图使用不同于标准视图的数据结构。

视图使您能够为不同类型的用户定制数据的呈现方式。 视图通常用于:

  • 通过限制对表的一组预定行或列的访问,提供额外级别的表安全性。

  • 隐藏数据复杂性。

    例如,可以使用 join 定义单个视图。join 是多个表中的相关列或行的集合。但是,视图隐藏了这样一个事实,即此信息实际上源于几个表。查询可能还会使用表信息执行大量计算。因此,用户无需知道如何执行 join 或计算,也可以查询视图。

  • 将应用程序与基表定义中的更改隔离开来。

    例如,如果视图的定义查询引用了四列表中的三列,此时向表中添加了第五列,视图的定义不会受影响。并且使用该视图的所有应用程序也不受影响。

与表不同,视图不分配存储空间,视图也不包含数据。 相反,视图是由从视图引用的基表中提取或导出数据的查询定义的。 因为视图基于其他对象,所以对于在数据字典中定义视图的查询,它不需要存储以外的存储。

视图对其引用的对象具有依赖关系,这些对象由数据库自动处理。例如,如果删除并重新创建视图的基表,则数据库将确定视图定义是否可以接受新的基表。

因为视图是从表派生的,所以它们有许多相似之处。用户可以查询视图,也可以对视图执行 DML 操作。对视图执行的操作会影响视图的某个基表中的数据,并受基表的完整性约束和触发器的约束。

OceanBase 数据库将视图定义作为定义视图的查询文本存储在数据字典中。

  1. 将针对视图的查询 (只要可能) 与定义视图和任何基础视图的查询合并。

    OceanBase 数据库优化合并查询,就像您在不引用视图的情况下发出查询一样。因此,OceanBase 数据库可以对任何被引用基表列使用索引,无论这些列是在视图定义中引用的,还是在针对视图的用户查询中引用的。

    有时 OceanBase 数据库无法将视图定义与用户查询合并。在这种情况下,OceanBase 数据库可能不会对被引用的列上使用所有索引。

  2. 执行 SQL 语句。

Join Views 在 FROM 子句中包含多个表或视图。

要实现可更新,视图必须满足多个条件。例如,其中一条通用规则就是对于 join view 的 INSERT、UPDATE 或 DELETE 操作一次只能修改一个基表。