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 であり、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;

したがって、私の質問は次のとおりです。手順の最後またはトランザクション内で一時テーブルを使用しない場合、そのテーブルはメモリ内にどれくらいの期間保持されますか? セッションが終了すると自動的に削除されますか、それとも接続が開いている限りメモリに残りますか?DROPMEMORY

**注: 明らかな答えは、コミット ステートメントの前に一時テーブルを削除することかもしれませんが、それができないと仮定しましょう。*


この質問に対するより詳細な回答は、https ://dba.stackexchange.com/questions/57971/how-long-will-a-temporary-memory-table-persist-if-i-dont-drop- にあります。 it-mysqlなので、この質問を閉じることに投票しました。

4

2 に答える 2

1

一時テーブルはデータベース接続の範囲内にあります

于 2014-01-31T15:24:09.077 に答える