虚拟表(virtual table)和临时表(temporary table)在数据库系统中都用于处理暂时性的数据存储需求,但它们的概念和用途有所不同:
虚拟表(通常是视图view):
- 虚拟表(也称为视图)并非实际存储数据的实体,而是基于一个或多个实际表的select查询定义的一个逻辑表结构。
- 视图不占用物理存储空间,当查询视图时,数据库系统会动态执行视图所对应的sql查询语句,并返回结果集作为虚拟表的内容。
- 视图的数据内容随其引用的基础表数据的变化而变化,每次查询都会得到最新的数据结果。
- 视图可以用来简化查询、保护数据安全(通过限制对基础表的直接访问)、实现数据的逻辑组织和抽象。
临时表:
- 临时表是实际存在于数据库中的物理表,但它是在会话(session)级别创建和使用的,主要用于存储临时数据,生命周期较短。
- 根据临时表的范围,可以分为会话级临时表(session-scoped temporary tables)和全局临时表(global temporary tables)。
- 会话级临时表只对该会话可见,当会话结束时,该临时表会被自动删除。
- 全局临时表则对所有会话可见,但在所有引用该表的会话都结束后,该表才会被删除。
- 数据存放在临时表中不会影响到持久化的数据库表,而且在会话结束后,临时表中的数据也会随之消失。
- 临时表允许进行dml操作(如insert、update、delete),可以手动插入、修改和删除数据,并且经常用于中间计算结果的暂存、分组处理、排序或其他复杂的处理流程中。
总结来说,虚拟表(视图)主要是一种逻辑概念,提供了一种查看数据的新方式,而临时表则是物理存在的,用于临时存储数据并在特定会话期间内有效。