15.1.21.2 Оператор CREATE TEMPORARY TABLE
При создании таблицы можно использовать ключевое слово TEMPORARY. Таблица TEMPORARY видна только в рамках текущей сессии и автоматически удаляется при закрытии сессии. Это означает, что две разные сессии могут использовать одно и то же имя временной таблицы без конфликтов друг с другом или с существующей не-TEMPORARY таблицей с таким же именем. (Существующая таблица скрыта до момента удаления временной таблицы.)
InnoDB не поддерживает сжатые временные таблицы. Когда innodb_strict_mode включен (по умолчанию), CREATE TEMPORARY
TABLE возвращает ошибку, если указаны ROW_FORMAT=COMPRESSED или KEY_BLOCK_SIZE. Если innodb_strict_mode выключен, выдаются предупреждения, и временная таблица создается с использованием несжатого формата строк. Параметр innodb_file_per-table не влияет на создание InnoDB временных таблиц.
CREATE TABLE вызывает неявную фиксацию, за исключением случаев использования ключевого слова TEMPORARY. См. Раздел 15.3.3, «Операторы, вызывающие неявную фиксацию».
Временные таблицы имеют очень слабую связь с базами данных (схемами). Удаление базы данных не приводит к автоматическому удалению всех TEMPORARY таблиц, созданных в рамках этой базы данных.
Для создания временной таблицы необходимо иметь привилегию CREATE TEMPORARY TABLES. После создания временной таблицы сервер больше не проверяет привилегии на эту таблицу. Создающая сессия может выполнять любые операции над таблицей, такие как DROP TABLE, INSERT, UPDATE или SELECT.
Следствием этого поведения является то, что сессия может манипулировать своими временными таблицами даже если текущий пользователь не имеет права их создавать. Предположим, что текущий пользователь не имеет привилегии CREATE TEMPORARY TABLES, но может выполнить хранимую процедуру с контекстом определённого пользователя, которая выполняется с привилегиями пользователя, имеющего CREATE TEMPORARY TABLES и создает временную таблицу. Во время выполнения процедуры сессия использует привилегии определяющего пользователя. После возврата процедуры эффективные привилегии возвращаются к текущему пользователю, который по-прежнему может видеть временную таблицу и выполнять над ней любые операции.
Нельзя использовать CREATE TEMPORARY TABLE ...
LIKE для создания пустой таблицы на основе определения таблицы, которая находится в mysql табличном пространстве, InnoDB системном табличном пространстве (innodb_system) или общем табличном пространстве. Определение табличного пространства для такой таблицы включает атрибут TABLESPACE, определяющий табличное пространство, в котором расположена таблица, и упомянутые выше табличные пространства не поддерживают временные таблицы. Чтобы создать временную таблицу на основе определения такой таблицы, используйте следующий синтаксис вместо этого:
CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
Поддержка TABLESPACE =
innodb_file_per_table и TABLESPACE =
innodb_temporary пунктов с CREATE TEMPORARY
TABLE устарела; ожидается, что она будет удалена в будущей версии MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.