B.4.6.2 临时 table 问题

创建临时 table创建的临时 table 具有以下限制:

  • InnoDBMEMORYMyISAMMERGE存储引擎仅支持TEMPORARYtable。

  • NDB 群集不支持临时 table。

  • SHOW TABLES语句未列出TEMPORARY个 table。

  • 要重命名TEMPORARY个 table,RENAME TABLE不起作用。使用ALTER TABLE代替:

ALTER TABLE old_name RENAME new_name;
  • 您不能在同一查询中多次引用TEMPORARYtable。例如对于以下不起作用:
SELECT * FROM temp_table JOIN temp_table AS t2;

该语句产生此错误:

ERROR 1137: Can't reopen table: 'temp_table'
  • 如果您以不同的别名在存储的函数中多次引用临时 table,即使引用在函数内的不同语句中发生,也会发生“无法重新打开 table”错误。对于在存储函数外部创建并在多个调用方和被调用方函数之间引用的临时 table,可能会发生这种情况。

  • 如果创建的TEMPORARY与现有的非TEMPORARYtable 具有相同的名称,则非TEMPORARYtable 将被隐藏,直到删除TEMPORARYtable 为止,即使这些 table 使用不同的存储引擎。

  • 在复制中使用临时 table 存在一些已知问题。有关更多信息,请参见第 16.4.1.29 节,“复制 table 和临时 table”