文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
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.31 節「複製和暫存資料表」