このページは機械翻訳したものです。
CREATE TEMPORARY TABLE で作成される一時テーブルには、次の制限があります:
TEMPORARYテーブルは、InnoDB,MEMORY,MyISAMおよびMERGEストレージエンジンでのみサポートされます。NDB Cluster では一時テーブルはサポートされていません。
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'クエリーで
TEMPORARYテーブルではなく共通テーブル式 (CTE) の使用が許可されている場合は、この問題を回避できます。 たとえば、これは「テーブルを再オープンできません」エラーで失敗します:CREATE TEMPORARY TABLE t SELECT 1 AS col_a, 2 AS col_b; SELECT * FROM t AS t1 JOIN t AS t2;エラーを回避するには、
TEMPORARYテーブルではなく CTE を定義するWITH句を使用します: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テーブルが削除されるまで非表示になります。レプリケーションで一時テーブルを使用する場合の既知の問題があります。 詳しくはセクション17.5.1.31「レプリケーションと一時テーブル」,をご覧ください。