MySQL 使用 STORAGE MEMORY 子句创建 table

MySQL create table with STORAGE MEMORY clause

我遇到了以下问题: 我有临时 table

CREATE temporary TABLE IF NOT EXISTS tmp_GL_VAR
   (      
      G_TABLE_NAME VARCHAR(100)   DEFAULT '',
      G_DATE DATETIME,      
      G_ERROR_CODE INT   DEFAULT 0
   );

而且我需要在单个查询中多次使用它,例如,

update t1 set c1 = (select G_TABLE_NAME from tmp_GL_VAR), c2 = (select G_ERROR_CODE from tmp_GL_VAR);

在带有游标等的函数中。但是,在所有这些情况下 MySQL 抛出错误:

SQL Error(1137): Can't reopen table 'tmp_GL_VAR'.

然后我尝试使用 STORAGE MEMORY 子句创建永久性 table(也尝试了 ENGINE MEMORY 子句),希望 table 在会话结束时被清除

CREATE TABLE GL_VAR
       (      
          G_TABLE_NAME VARCHAR(100)   DEFAULT '',
          G_DATE DATETIME,      
          G_ERROR_CODE INT   DEFAULT 0
       ) STORAGE MEMORY;

但不幸的是这个选项没有效果。数据在不同的会话(连接)中可用。

请告诉我如何在不重写所有查询、存储函数等的情况下绕过“无法重新打开 table”(LOC 太多)。 要求是:table 应该在会话结束时被删除或至少被截断,并且一个会话的数据不应在另一个会话中可用(每个用户在此 table 中只能看到自己的数据) ).

感谢任何帮助。

是的。有问题http://dev.mysql.com/doc/refman/5.1/en/temporary-table-problems.html

You cannot refer to a TEMPORARY table more than once in the same query. For example, the following does not work:

mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'
This error also occurs if you refer to a temporary table multiple times in a stored function under different aliases, even if the references occur in different statements within the function.

我认为你应该使用通常的 table 来达到这个目的。

并添加一些会话标识符以使其在您的多用户系统中工作。 (是的,您必须将此标识符添加到使用此 table 的所有其他查询)

随时按此标识符(或旧时间戳,如果需要)删除行