ouc*_*cil 5 mysql stored-procedures temp-tables memory-table
我在 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;
Run Code Online (Sandbox Code Playgroud)
调用过程时,第一个值是我想要的分支的顶部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;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如果我在过程结束时或在我的事务中不使用DROP临时表,那么该表将在内存中保留多长时间?MEMORY一旦会话结束,它会自动删除,还是只要连接打开,它就会保留在内存中?
**注意,明显的答案可能是在提交语句之前删除临时表,但让我们假设我不能这样做。*
这个问题的更详细答案可以在这里找到: https: //dba.stackexchange.com/questions/57971/how-long-will-a-temporary-memory-table-persist-if-i-dont-drop- it-mysql所以我投票结束这个问题。
| 归档时间: |
|
| 查看次数: |
5299 次 |
| 最近记录: |