Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - SQL 用法 » 表、视图和索引

 

临时表

临时表存储在临时文件中。就如任何其它 dbspace 的页一样,临时文件的页也可以缓存。对临时表的操作决不会写入事务日志。临时表分为两类:局部临时表和全局临时表。

  • 局部临时表   局部临时表仅存在于某个连接存续期间或者某个复合语句存续期间(如果该表是在复合语句中定义的)。

    同一范围内的两个局部临时表不得同名。如果使用与某个基表相同的名称创建临时表,该基表只能在局部临时表的范围结束时,才能在连接中变为可见。任何一个连接不能使用与现有临时表相同的名称创建基表。

    在本地临时表上创建索引时,如果 auto_commit_on_create_local_temp_index 选项设置为 Off,则在创建表索引前不会进行任何提交操作。

  • 全局临时表   全局临时表会在数据库中保留,直至通过 DROP TABLE 语句显式删除。来自相同或不同应用程序的多个连接可以同时使用全局临时表。全局临时表具有如下特性:

    • 表的定义记录在目录中,并将保留到表被显式删除。

    • 对表进行的插入、更新和删除操作不会记录在事务日志中。

    • 表的列统计信息由数据库服务器在内存中维护。

    全局临时表分为两类:非共享共享。通常情况下,全局临时表是非共享的,也就是说,每个连接只能在表中看到其自己的行。连接结束时,该连接的行即从表中删除。

    如果全局临时表为共享的,表的所有数据均在所有连接间共享。要创建共享的全局临时表,创建表时应指定 SHARE BY ALL 子句。除了全局临时表的一般特性外,共享的全局临时表还具有以下特性:

    • 表的内容会保留到表被显式删除或数据库被关闭。

    • 数据库启动后,表是空的。

    • 表的行锁定行为与基表相同。

  • 非事务性临时表   使用 CREATE TABLE 语句的 NOT TRANSACTIONAL 子句可以将临时表声明为非事务性表。在某些情况下,NOT TRANSACTIONAL 子句可以提高性能,因为对非事务性临时表执行的操作不会记入回退日志中。例如,如果反复调用使用临时表的过程而不会干预到 COMMIT 或 ROLLBACK,或者表中包含许多行,则 NOT TRANSACTIONAL 会很有用。对非事务性临时表的更改不受 COMMIT 或 ROLLBACK 的影响。

 另请参见

创建全局临时表
在过程中引用临时表