Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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临时表不受innodb_file_per-table选项影响。

CREATE TABLE 会隐式提交,除非使用 TEMPORARY 关键字。见第15.3.3节,“隐式提交语句”

TEMPORARY 表与数据库(架构)之间关系很松散。删除一个数据库不自动删除该数据库内创建的 TEMPORARY 表。

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

这种行为的结果之一是,一个会话可以在当前用户没有创建临时表权限的情况下仍然操作临时表。假设当前用户不具有CREATE TEMPORARY TABLES特权,但可以执行一个定义上下文存储过程,该过程在执行时使用定义者的权限。该过程执行完毕后,会话的实际特权恢复到当前用户,这个用户仍然可以看到临时表并对其进行任何操作。

你不能使用CREATE TEMPORARY TABLE ... LIKE语句创建一个基于mysql、InnoDB系统表空间(innodb_system)或通用表空间的空表。该表空间定义包括一个TABLESPACE属性,定义了表所在的表空间,而这些表空间不支持临时表。要创建基于这种表的临时表,可以使用以下语句:

CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
Note

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