可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。除非使用 DROP TABLE 语句显式除去临时表,否则本地临时表将在当前会话结束时由系统自动除去.全局临时表在系统重新启动时自动除去。临时表可以方便用户,用户不需要关注表的删除.临时表可以不记日志,提高性能.
可以创建事务级临时表和会话级临时表。临时表的定义对所有有权限的会话可见,各个会话临时表中的数据是相互隔离的。临时表需要记录日志,以支持事务级临时表的回滚等操作。事务级临时表的数据在事务提交或回滚时会被截断,会话级临时表的数据在会话结束时会被截断。临时表不会自动删除,只能在没有其他会话绑定时使用 DROP TABLE 语句显示删除。
1 个回复
nccloud
[ LOCAL | GLOBAL ] { TEMPORARY | TEMP }
如果声明了此参数,则该表创建为临时表。
当指定LOCAL或忽略时表示本地临时表,本地临时表仅在当前会话中可见。
虽然可以通过指定模式名的方式来访问其它会话的局部临时表数据,但请不要这么做, 以免出现数据丢失的情况,因为局部临时表在会话结束后将被销毁。
当指定GLOBAL时表示临时表定义在所有有权限的会话可中都可见,临时表中的数据只有向表中插入数据的会话可见。临时表分为事务级临时表和会话级临时表,可以通过ON COMMIT选项指定创建何种类型的临时表,不指定时默认为事务级临时表。会话级临时表中数据的生命周期为整个会话连接时间内,事务级临时表中数据的生命周期为当前事务内。
神通数据库中sql语句默认处于事务内,所以使用事务级临时表时需要显式开启事务。
{ON COMMIT DELETE|PRESERVE ROWS}
ON COMMIT选项只有在创建临时表时才有效,用于指定临时表的数据是会话隔离还是事务隔离。
DELETE ROWS:指定临时表为事务级临时表,即数据是事务隔离的,在事务提交/回滚时会截断临时表,删除临时表中的所有行;当不指定ON COMMIT选项时,临时表默认为事务级临时表。
PRESERVE ROWS:指定临时表为会话级临时表,即数据是会话隔离的,在会话结束时会截断临时表,删除临时表中的所有行。
可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。除非使用 DROP TABLE 语句显式除去临时表,否则本地临时表将在当前会话结束时由系统自动除去.全局临时表在系统重新启动时自动除去。临时表可以方便用户,用户不需要关注表的删除.临时表可以不记日志,提高性能.
可以创建事务级临时表和会话级临时表。临时表的定义对所有有权限的会话可见,各个会话临时表中的数据是相互隔离的。临时表需要记录日志,以支持事务级临时表的回滚等操作。事务级临时表的数据在事务提交或回滚时会被截断,会话级临时表的数据在会话结束时会被截断。临时表不会自动删除,只能在没有其他会话绑定时使用 DROP TABLE 语句显示删除。
临时表的创建与普通表的创建基本一致,有如下不同:
当临时表被创建时只在系统表中保存元数据,不创建数据段,每一个会话第一次向临时表中插入数据时会创建一个与会话相关联的数据段,即临时表的实例化(通过视图v_sys_temp_instance可以查看当前所有的临时表实例),此时临时表与该会话绑定,在会话结束时销毁数据段并解除绑定,事务级临时表rollback仅回滚数据不回滚(删除)数据段实例,当有其他会话与临时表绑定时无法删除临时表。
创建临时表不支持外键约束、分区和大对象,支持指定存储参数,但不支持指定初始大小、表空间和nlogging。
临时表不支持并行、统计信息、导入和全文索引。
-- 创建事务级临时表
CREATE GLOBAL TEMPORARY TABLE tab6(a INT, b VARCHAR(10));
-- 创建事务级临时表
CREATE GLOBAL TEMPORARY TABLE tab7(a int, b varchar(10)) ON COMMIT DELETE ROWS;
-- 创建会话级临时表
CREATE GLOBAL TEMPORARY TABLE tab8(a int, b varchar(10)) ON COMMIT PRESERVE ROWS;