用于创建临时表的关键命令

时间:2014-04-14 08:21:14

标签: mysql

我正在存储过程中创建临时表。想知道在程序中包含哪些命令以避免冲突?

我通常使用以下语法

 CREATE TEMPORARY TABLE IF NOT EXISTS temp_shipmentcount

并使用

结束时删除命令。

我应该在程序开始时添加drop命令吗?

1 个答案:

答案 0 :(得分:1)

Temporary表是连接范围的。它们仅在连接关闭之前存在。

根据Temporary tables

的文件
  

您可以在创建表格时使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。这意味着两个不同的连接可以使用相同的临时表名,而不会相互冲突或使用同名的现有非TEMPORARY表...

如果连接未关闭但在用户之间共享,则必须drop并重新创建。但是使用共享连接删除数据库对象将导致问题。

在存储过程中使用具有运行时生成的名称的临时表是更好的选择。这对使用共享连接对象也是安全的。

例子

set @temp_table_name := concat( 'temp_table_', ( CURRENT_TIMESTAMP + 0 ) );

set @sql := concat( 'create temporary table ', @temp_table_name );
set @select_stmt := concat( 'select this', blah, blah );
set @sql := concat( @sql, ' as ' , @select_stmt );

prepare stmt from @sql;
execute stmt;
drop prepare stmt;

-- perform opearations on temp table
--
-- in between here
--
-- and then drop it before leaving

set @drop_temp := concat( 'drop temporary table ', @temp_table_name );
prepare stmt from @drop_temp;
execute stmt;
drop prepare stmt;