15.1.20.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 имеют очень слабую связь с базами данных (схемами). Удаление базы данных не приводит к автоматическому удалению любых 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.