テーブルの作成時に TEMPORARY
キーワードを使用できます。 TEMPORARY
テーブルは現在のセッション内でのみ表示され、セッションがクローズされると自動的に削除されます。 つまり、2 つの異なるセッションが同じ一時テーブル名を使用することができ、互いに、または同じ名前の既存の TEMPORARY
以外のテーブルと競合することはありません。 (既存のテーブルは、一時テーブルが削除されるまで非表示になります。)
InnoDB
では、圧縮一時テーブルはサポートされていません。 innodb_strict_mode
が有効な場合 (デフォルト)、ROW_FORMAT=COMPRESSED
または KEY_BLOCK_SIZE
が指定されていると、CREATE TEMPORARY TABLE
はエラーを返します。 innodb_strict_mode
が無効な場合は、警告が発行され、圧縮されていない行形式を使用して一時テーブルが作成されます。 innodb_file_per-table
オプションは、InnoDB
一時テーブルの作成には影響しません。
CREATE TABLE
では、TEMPORARY
キーワードとともに使用する場合を除き、暗黙的なコミットが発生します。 セクション13.3.3「暗黙的なコミットを発生させるステートメント」を参照してください。
TEMPORARY
テーブルは、データベース (スキーマ) と非常に疎な関係を持っています。 データベースを削除しても、そのデータベース内で作成されたどの TEMPORARY
テーブルも自動的には削除されません。
一時テーブルを作成するには、CREATE TEMPORARY TABLES
権限が必要です。 セッションが一時テーブルを作成したあと、サーバーはそのテーブルに対するそれ以上の権限チェックを実行しません。 セッションの作成によって、DROP TABLE
、INSERT
、UPDATE
、SELECT
などのあらゆる操作をテーブル上で実行できます。
この動作の 1 つの影響として、現在のユーザーが一時テーブルを作成する権限を持たなくても、セッションが一時テーブルを操作できるということがあります。 現在のユーザーには CREATE TEMPORARY TABLES
権限はありませんが、CREATE TEMPORARY TABLES
を持ち、一時テーブルを作成するユーザーの権限で実行される定義者コンテキストのストアドプロシージャを実行できるとします。 プロシージャーの実行中、セッションは定義側ユーザーの権限を使用します。 プロシージャーが復帰したあと、有効な権限は現在のユーザーの権限に戻り、これによって引き続き一時テーブルを表示し、一時テーブルに対してあらゆる操作を実行できることになります。
CREATE TEMPORY TABLE ... LIKE
を使用して、mysql
テーブルスペース、InnoDB
システムテーブルスペース (innodb_system
) または一般テーブルスペースに存在するテーブルの定義に基づいて空のテーブルを作成することはできません。 このようなテーブルのテーブルスペース定義には、テーブルが存在するテーブルスペースを定義する TABLESPACE
属性が含まれており、前述のテーブルスペースは一時テーブルをサポートしていません。 このようなテーブルの定義に基づいて一時テーブルを作成するには、かわりに次の構文を使用します:
CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
CREATE TEMPORARY TABLE
での TABLESPACE = innodb_file_per_table
句および TABLESPACE = innodb_temporary
句のサポートは、MySQL 8.0.13 で非推奨になりました。MySQL の将来のバージョンで削除される予定です。