DB2 基本表与临时表之间的差别

DB2 基本表与两类临时表之间存在多项差别。

下表对基本表、已创建临时表和已声明临时表之间的重要差别作了概述。
表 1. DB2 基本表与 DB2 临时表之间的重要差别
差别领域 差别
创建、持久性以及共享表描述的能力 基本表:CREATE TABLE 语句将表的描述放入目录视图 SYSCAT.TABES。 表描述具有持久性,并且可以在不同连接之间进行共享。 在 CREATE TABLE 语句中,可以对表名进行限定。 如果未对表名进行限定,那么将使用应用于 SQL 语句的标准限定规则隐式地对其进行限定。
已创建临时表: CREATE GLOBAL TEMPORARY TABLE 语句将表的描述放在目录视图 SYSCAT.TABLES。 表描述具有持久性,并且可以在不同连接之间进行共享。 在 CREATE GLOBAL TEMPORARY TABLE 语句中,可以对表名进行限定。 如果未对表名进行限定,那么将使用应用于 SQL 语句的标准限定规则隐式地对其进行限定。
已声明的临时表: DECLARE GLOBAL TEMPORARY TABLE 语句未将表的描述放在目录中。 表描述在发出 DECLARE GLOBAL TEMPORARY TABLE 语句的连接结束后不再存在,所以只有该连接才知道该描述。

因此,对于同一个已声明临时表,每个连接都可以有自己的有可能唯一的描述。 在 DECLARE GLOBAL TEMPORARY TABLE 语句中,可以对表名进行限定。 如果对表名进行限定,那么必须将 SESSION 用作模式限定符。 如果未对表名进行限定,那么将隐式地使用 SESSION 作为限定符。

表实例化和共享数据能力 基本表:CREATE TABLE 语句创建表的一个空实例,所有连接都使用表的该实例。 表和数据具有持久性。
已创建临时表: CREATE GLOBAL TEMPORARY TABLE 语句不会创建该表的实例。 在任何使用该连接的程序所执行的打开、选择、插入、更新或删除操作中,对该表的第一个隐式或显式引用都将创建给定表的空实例。 每个引用该表的连接都有自己的唯一表实例,该实例在该连接结束后不再存在。
已声明的临时表: DECLARE GLOBAL TEMPORARY TABLE 语句为连接创建空的表实例。 每个声明该表的连接都有自己的唯一表实例,该实例在该连接结束后不再存在。
连接期间对表的引用 基本表:各个连接对表名的引用将引用同一个持久表描述以及当前服务器上的同一个实例。 如果未对所引用的表名进行限定,那么将使用应用于 SQL 语句的标准限定规则隐式地对其进行限定。
已创建临时表:各个连接对表名的引用将引用同一个持久表描述,但各个连接将引用当前服务器上不同的表实例。 如果未对所引用的表名进行限定,那么将使用应用于 SQL 语句的标准限定规则隐式地对其进行限定。
已声明临时表:在多个连接中,各个连接对表名的引用将引用当前服务器上不同的表描述和表实例。 在除 DECLARE GLOBAL TEMPORARY TABLE 语句以外的 SQL 语句中,对表名的引用必须包括 SESSION 作为模式限定符。 如果未通过 SESSION 对表名进行限定,那么将假定引用基本表。
表特权和授权 基本表:所有者隐式地对表拥有所有表特权,并且有权删除该表。 所有者的表特权可以被授予和撤销(可以逐个特权地进行授予和撤销,也可以通过 ALL 子句进行)。

另一个授权标识只有被授予该表的适当特权之后,才能访问该表。

已创建临时表:所有者隐式地对表拥有所有表特权,并且有权删除该表。 所有者的表特权可以被授予和撤销(可以逐个特权地进行授予和撤销,也可以通过 ALL 子句进行)。

另一个授权标识只有被授予该表的适当特权之后,才能访问该表。

已声明临时表:PUBLIC 隐式地对表拥有除 GRANT 权限以外的所有表特权,并且还有权删除该表。 这些表特权无法被授予或撤销。

任何授权标识都能够访问该表,而不要求授予对该表的任何特权。

索引和其他 SQL 语句支持 基本表:支持索引以及用于修改数据的 SQL 语句(INSERT、UPDATE 和 DELETE 等等)。 索引可以在不同的表空间中。
已创建临时表:支持索引以及用于修改数据的 SQL 语句(INSERT、UPDATE 和 DELETE 等等)。 索引只能在表所在的表空间中。
已声明临时表:支持索引以及用于修改数据的 SQL 语句(INSERT、UPDATE 和 DELETE 等等)。 索引只能在表所在的表空间中。
锁定、日志记录和恢复 基本表:支持锁定、日志记录和恢复功能。
已创建临时表:不支持锁定和恢复功能,但显式地指定了 LOGGED 时,支持日志记录功能。 仅当显式地指定了 LOGGED 时,才支持撤销恢复功能(将更改回滚到保存点或最近的落实点)。
已声明临时表:不支持锁定和恢复功能,但仅当显式或隐式地指定了 LOGGED 时,才支持日志记录功能。 在显式或隐式地指定了 LOGGED 时,支持撤销恢复功能(将更改回滚到保存点或最近的落实点)。