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 であり、2 番目の値は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
**注: 明らかな答えは、コミット ステートメントの前に一時テーブルを削除することかもしれませんが、それができないと仮定しましょう。*
この質問に対するより詳細な回答は、https ://dba.stackexchange.com/questions/57971/how-long-will-a-temporary-memory-table-persist-if-i-dont-drop- にあります。 it-mysqlなので、この質問を閉じることに投票しました。