各种数据库临时表的使用区别总结(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 22:01 点击:次
) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
3. MySQL 5.X
基本上就是会话级的,与PG类似,但没有PG语法完整。
建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)
临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
DROP TABLE tmp_table
如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。
如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP
因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。
4. Sybase ASE15.X
基本上就是比较裸露的语法了:
create table tempdb..t(id int primary key), 这个等价于global temp table t, server级的, 各连接都可以访问,需要显式的drop
create table #t(id int primary key), 这个等价于local temp table t, 会话级的,连接断开时会自动删除
5. MS SQL Server 200X
与Sybase类似,但多出一个变种
create table ##t(id int primary key), 这个等价于global temp table t, server级的, 各连接都可以访问,需要显式的drop
create table #t(id int primary key), 这个等价于local temp table t, 会话级的,连接断开时会自动删除
最后,Sybase ASE以及MS SQL Server使用中,需要注意会话的自动产生及断开
比如一个变量:
declare @vsql varchar(4096)
set @vsql="select * into #t123 from emp"
execute (@vsql)
set @vsql="select top 3 * from #t123"
execute (@vsql)
当你执行这个段时,你会发现,最后提示#t123不存在,因为execute在执行完时,会话即退出。要想执行成功,有两种方法:
1. 将两个sql合成一段来执行 : set @vsql = @vsql || " select top 3 * from #t123"
2. 使用global temp table, 即tempdb..t123或者SQLServer中的##t123
临时表,在ASE, SQLServer中使用频率非常高,经常出现在存储过程当中。
6. Oracle9.x and later
语法与PG一样,还提供on commit preserve rows, 和on commit delete rows功能。
但是只提供global功能,意即表本身不会自动删除。 只是提供是否保留数据的功能。这样,preserve rows相当于会话级,而on commit delete rows则相当于事务级的临时表了。用处还是蛮大的。
缺点还有:
1)不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2)不支持主外键关系
总之,临时表的实现和使用,还真没有一个十全十美的商家。多留心一点就是了。
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>