Как долго будет сохраняться временная таблица MEMORY, если я ее не отброшу (MySQL)
Я использую рекурсивную хранимую процедуру в 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;
При вызове процедуры первое значение - это верхний идентификатор нужной мне ветви, а второе - 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. Очевидный ответ может состоять в том, чтобы отбросить временную таблицу перед оператором commit, но давайте на минутку предположим, что я не могу этого сделать.*
Более подробный ответ на этот вопрос можно найти здесь: https://dba.stackexchange.com/questions/57971/how-long-will-a-temporary-memory-table-persist-if-i-dont-drop-it-mysql, поэтому я проголосовал, чтобы закрыть этот вопрос.
2 ответа
Согласно инструкции, временная таблица автоматически удаляется при закрытии соединения (выделено мной):
Временные столы
Вы можете использовать ключевое слово TEMPORARY при создании таблицы. Таблица TEMPORARY видна только текущему соединению и автоматически удаляется при закрытии соединения.
Временные таблицы находятся в области подключения к базе данных