MySQL 9.0 版本注意事項
使用 CREATE TEMPORARY TABLE
建立的暫存表格有下列限制
TEMPORARY
表格僅支援InnoDB
、MEMORY
、MyISAM
和MERGE
儲存引擎。NDB 叢集不支援暫存表格。
SHOW TABLES
陳述式不會列出TEMPORARY
表格。若要重新命名
TEMPORARY
表格,RENAME TABLE
無法運作。請改用ALTER TABLE
ALTER TABLE old_name RENAME new_name;
您無法在同一個查詢中多次參考
TEMPORARY
表格。例如,以下操作無效SELECT * FROM temp_table JOIN temp_table AS t2;
此陳述式會產生此錯誤
ERROR 1137: Can't reopen table: 'temp_table'
如果您的查詢允許使用通用表格運算式 (CTE) 而非
TEMPORARY
表格,您可以解決此問題。例如,此操作會因 無法重新開啟表格 錯誤而失敗CREATE TEMPORARY TABLE t SELECT 1 AS col_a, 2 AS col_b; SELECT * FROM t AS t1 JOIN t AS t2;
若要避免此錯誤,請使用定義 CTE 的
WITH
子句,而不是TEMPORARY
表格WITH cte AS (SELECT 1 AS col_a, 2 AS col_b) SELECT * FROM cte AS t1 JOIN cte AS t2;
如果您在儲存函數中以不同的別名多次參考暫存表格,即使參考發生在函數內的不同陳述式中,也會發生 無法重新開啟表格 錯誤。對於在儲存函數外部建立並在多個呼叫和被呼叫函數中參考的暫存表格,也可能會發生這種情況。
如果以與現有非
TEMPORARY
表格相同的名稱建立TEMPORARY
表格,則非TEMPORARY
表格將會隱藏,直到捨棄TEMPORARY
表格為止,即使這些表格使用不同的儲存引擎也一樣。在複製中使用暫存表格時,有一些已知問題。如需更多資訊,請參閱第 19.5.1.32 節,「複製與暫存表格」。