文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國 Letter) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


B.3.6.2 TEMPORARY 表格問題

使用 CREATE TEMPORARY TABLE 建立的暫存表格有下列限制

  • TEMPORARY 表格僅支援 InnoDBMEMORYMyISAMMERGE 儲存引擎。

  • 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 節,「複製與暫存表格」