Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  / 13.1.20 CREATE TABLE 语句  /  13.1.20.2 CREATE TEMPORARY TABLE 语句

13.1.20.2 CREATE TEMPORARY TABLE 语句

TEMPORARY创建表时 可以使用关键字。TEMPORARY表仅在当前会话中可见,并在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名称而不会相互冲突或与TEMPORARY同名的现有非表发生冲突。(在临时表被删除之前,现有表是隐藏的。)

InnoDB不支持压缩临时表。启用时innodb_strict_mode (默认值), 如果指定或 则CREATE TEMPORARY TABLE返回错误 。如果 禁用,则会发出警告并使用非压缩行格式创建临时表。该 选项不影响 临时表的创建。 ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZEinnodb_strict_modeinnodb_file_per-tableInnoDB

CREATE TABLE导致隐式提交,除非与TEMPORARY 关键字一起使用。请参阅第 13.3.3 节,“导致隐式提交的语句”

TEMPORARY表与数据库(模式)的关系非常松散。删除数据库不会自动删除TEMPORARY在该数据库中创建的任何表。

要创建临时表,您必须具有 CREATE TEMPORARY TABLES 权限。会话创建临时表后,服务器不会对该表执行进一步的权限检查。创建会话可以对表执行任何操作,例如 DROP TABLEINSERTUPDATESELECT

此行为的一个含义是会话可以操作其临时表,即使当前用户没有创建临时表的权限也是如此。假设当前用户没有CREATE TEMPORARY TABLES 权限,但能够执行一个定义上下文存储过程,该存储过程以拥有权限的用户的权限执行,CREATE TEMPORARY TABLES并创建了一个临时表。在过程执行时,会话使用定义用户的权限。过程返回后,有效权限恢复为当前用户的权限,该用户仍然可以查看临时表并对其执行任何操作。

您不能根据驻留在 表空间、系统表空间 ( ) 或通用表空间CREATE TEMPORARY TABLE ... LIKE中的表的定义来创建空表。此类表的表空间定义包括 定义表所在表空间的属性,上述表空间不支持临时表。要基于此类表的定义创建临时表,请改用以下语法: mysqlInnoDBinnodb_systemTABLESPACE

CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
笔记

从 MySQL 8.0.13 开始不推荐使用 andTABLESPACE = innodb_file_per_table子句TABLESPACE = innodb_temporaryCREATE TEMPORARY TABLE希望它在未来版本的 MySQL 中被删除。