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
关键字一起使用。请参阅第 13.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;
从 MySQL 8.0.13 开始不推荐使用
andTABLESPACE =
innodb_file_per_table
子句TABLESPACE =
innodb_temporary
;
CREATE TEMPORARY
TABLE
希望它在未来版本的 MySQL 中被删除。