绝大多数关系型数据库都有临时表,这在SQL-92中也是一个标准。临时表的特性在于分布式运用,也即任何一个用户连接到数据库,即使使用的是同名的临时表,这个用户的所有操作也对另一连接的用户不可见。在SQL-92中,临时表中的定义是这样的:
(1)使用CREATE TEMPORARY TABLE....定义临时表。
(2)定义临时表的结尾部分可以存在ON COMMIT DELETE ROWS子句或ON COMMIT PRESERVE ROWS子句。
(3)若在缺省ON COMMIT子句的情况下,将使用ON COMMIT DELETE ROWS子句所提供的行为。
通过ON COMMIT DELETE ROWS子句定义的临时表它的特性在于临时表的所有数据将在一次事务提交后将全部删除。
通过ON COMMIT DELETE PRESERVE ROWS子句定义的临时表它的特性在于临时表的所有数据在一次事务提交后将依旧保留。
但是无论使用哪种ON COMMIT子句定义的临时表,它在一次数据库连接结束后都将被删除所有数据。
注意:
每一种数据库对于临时表定义的定义都存在着兼容性的问题,在SQL-92编码规范中,临时表创建后即使连接结束也不会被删除,符合这个标准的数据库具有代表性的是Oracle;但是有些数据库则定义临时表在连接结束后,将连同整个表都会被删除,如:MySql