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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 表、视图和索引

 

临时表

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

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

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

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

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

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

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

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

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

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

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

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

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

 另请参见

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