13.1.18.2 CREATE TEMPORARY TABLE 语句
您可以在创建 table 时使用TEMPORARY
关键字。 TEMPORARY
table 仅在当前会话中可见,并且在会话关闭时会自动删除。这意味着两个不同的会话可以使用相同的临时 table 名称,而不会彼此冲突或与现有的相同名称的非TEMPORARY
table 冲突。 (在删除临时 table 之前,现有 table 一直处于隐藏状态.)
CREATE TABLE导致隐式提交,除非与TEMPORARY
关键字一起使用。参见第 13.3.3 节“导致隐式提交的声明”。
TEMPORARY
table 与数据库(方案)的关系非常松散。删除数据库不会自动删除该数据库中创建的任何TEMPORARY
table。另外,如果用CREATE TABLE
语句中的数据库名来限制 table 名,则可以在不存在的数据库中创建TEMPORARY
table。在这种情况下,对 table 的所有后续引用都必须使用数据库名称进行限定。
要创建临时 table,您必须具有创建临时 table特权。会话创建临时 table 后,服务器将不再对该 table 执行任何特权检查。创建会话可以对 table 执行任何操作,例如DROP TABLE,INSERT,UPDATE或SELECT。
这种行为的一个暗示是,即使当前用户没有创建临时 table 的权限,会话也可以操纵其临时 table。假设当前用户不具有创建临时 table特权,但是能够执行定义者上下文存储过程,该存储过程以具有创建临时 table用户的特权执行并创建一个临时 table。在执行过程时,会话将使用定义用户的特权。该过程返回后,有效特权将还原为当前用户的特权,该用户仍可以看到临时 table 并对其执行任何操作。
Note
从 MySQL 5.7.24 开始,不支持对带有创建临时 table的TABLESPACE = innodb_file_per_table
和TABLESPACE = innodb_temporary
子句的支持,并将在将来的 MySQL 版本中删除。