MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
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「レプリケーションと一時テーブル」,をご覧ください。