Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  CREATE TEMPORARY TABLE Statement

15.1.20.2 创建临时表语句

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

InnoDB 不支持压缩临时表。当 innodb_strict_mode 启用(默认情况下),CREATE TEMPORARY TABLE 如果指定 ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE 将返回错误。如果 innodb_strict_mode 禁用,警告将被发出,并且临时表将使用非压缩的行格式创建。innodb_file_per_table 选项不影响 InnoDB 临时表的创建。

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

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

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

这种行为的一个推论是,会话可以操作其临时表,即使当前用户没有创建它们的权限。假设当前用户没有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;
Note

TABLESPACE = innodb_file_per_tableTABLESPACE = innodb_temporary子句与CREATE TEMPORARY TABLE的支持将被弃用;预计在未来版本的 MySQL 中将被删除。