我在 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所以我投票结束了这个问题。