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 的所有其他查询)
随时按此标识符(或旧时间戳,如果需要)删除行
我遇到了以下问题: 我有临时 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 的所有其他查询)
随时按此标识符(或旧时间戳,如果需要)删除行