B.3.6.2 Проблемы с временными таблицами
Временные таблицы, созданные с помощью CREATE TEMPORARY
TABLE, имеют следующие ограничения:
Временные таблицы поддерживаются только движками хранения
InnoDB,MEMORY,MyISAMиMERGE.Временные таблицы не поддерживаются для кластеров NDB.
Команда
SHOW TABLESне отображает временные таблицы.-
Для переименования временных таблиц,
RENAME TABLEне работает. ИспользуйтеALTER TABLEвместо этого:ALTER TABLE old_name RENAME new_name;
-
Нельзя ссылаться на временную таблицу более одного раза в одном запросе. Например, следующий запрос не работает:
SELECT * FROM temp_table JOIN temp_table AS t2;
Запрос генерирует ошибку:
ERROR 1137: Can't reopen table: 'temp_table'
Эту проблему можно обойти, если ваш запрос позволяет использовать общие табличные выражения (CTE) вместо временной таблицы. Например, это приведет к ошибке Невозможно повторно открыть таблицу:
CREATE TEMPORARY TABLE t SELECT 1 AS col_a, 2 AS col_b; SELECT * FROM t AS t1 JOIN t AS t2;
Чтобы избежать ошибки, используйте предложение
WITH, которое определяет CTE, а не временную таблицу:WITH cte AS (SELECT 1 AS col_a, 2 AS col_b) SELECT * FROM cte AS t1 JOIN cte AS t2;
Ошибка «Невозможно повторно открыть таблицу» также возникает, если вы ссылаетесь на временную таблицу несколько раз в хранимой функции под разными псевдонимами, даже если эти ссылки находятся в разных операторах внутри функции. Это может произойти для временных таблиц, созданных за пределами хранимых функций, и ссылающихся на них в разных вызывающих и вызываемых функциях.
Если временная таблица создается с тем же именем, что и существующая не временная таблица, то не временная таблица скрывается до тех пор, пока временная таблица не будет удалена, даже если таблицы используют разные движки хранения.
Известны проблемы при использовании временных таблиц с репликацией. Дополнительную информацию можно найти в Разделе 19.5.1.32, «Репликация и временные таблицы».
© 2025 Oracle
Licensed under the GPLv2 License.