我正在存储过程中创建临时表。想知道在程序中包含哪些命令以避免冲突?
我通常使用以下语法
CREATE TEMPORARY TABLE IF NOT EXISTS temp_shipmentcount
并使用
结束时删除命令。
我应该在程序开始时添加drop命令吗?
答案 0 :(得分:1)
Temporary
表是连接范围的。它们仅在连接关闭之前存在。
您可以在创建表格时使用
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;