文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  CREATE TEMPORARY TABLE 语句

15.1.20.2 CREATE TEMPORARY TABLE 语句

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

InnoDB 不支持压缩临时表。 当启用 innodb_strict_mode(默认)时,如果指定了 ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE,则 CREATE TEMPORARY TABLE 会返回错误。 如果禁用 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;
注意

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