4

我在 MySQL 中使用递归存储过程来生成一个名为的临时表id_list,但我必须在后续选择查询中使用该过程的结果,所以我不能DROP在过程中使用临时表...

BEGIN;

/* generates the temporary table of ID's */
CALL fetch_inheritance_groups('abc123',0);

/* uses the results of the SPROC in the WHERE */
SELECT a.User_ID
FROM usr_relationships r 
INNER JOIN usr_accts a ON a.User_ID = r.User_ID 
WHERE r.Group_ID = 'abc123' OR r.Group_ID IN (SELECT * FROM id_list) 
GROUP BY r.User_ID;

COMMIT;

调用过程时,第一个值是我想要的分支的顶部 ID,第二个值是tier过程在递归期间使用的。在递归循环之前,它会检查是否tier = 0运行以及是否运行:

DROP TEMPORARY TABLE IF EXISTS id_list;
CREATE TEMPORARY TABLE IF NOT EXISTS id_list (iid CHAR(32) NOT NULL) ENGINE=memory;

所以我的问题是:如果我在程序结束时或在我的事务中没有DROP临时表,那么该表将在内存中保留多长时间?MEMORY会话结束后它会自动删除,还是只要连接打开它就会保留在内存中?

**NB 显而易见的答案可能是在提交语句之前删除临时表,但让我们暂时假设我不能这样做。*


可以在此处找到此问题的更详细答案:https ://dba.stackexchange.com/questions/57971/how-long-will-a-temporary-memory-table-persist-if-i-dont-drop- it-mysql所以我投票结束了这个问题。

4

2 回答 2

4

根据手册,关闭连接时会自动删除临时表(强调我的):

临时表

创建表时可以使用 TEMPORARY 关键字。TEMPORARY 表仅对当前连接可见,并在连接关闭时自动删除

于 2014-01-31T15:28:31.690 回答
1

临时表在数据库连接范围内

于 2014-01-31T15:24:09.077 回答