データベースを扱う際、一時的にデータを保存したい場面がよくあります。
例えば、、、
- 複雑な計算結果を一時的に保存して、繰り返し参照したい
- クエリのパフォーマンスを向上させるために、一時的にデータを整理したい
- バッチ処理で中間データを扱いたい
このような場合に便利なのが「テンポラリテーブル(Temporary Table)」です。
PostgreSQLとMySQLのテンポラリテーブルの基本について解説します。
テンポラリテーブルとは?
テンポラリテーブルは、一時的にデータを保存するためのテーブルです。
通常のテーブルとは異なり、セッション(接続)が終了すると自動で削除されます。
主な特徴:
✅ 一時的なデータを保存できる
✅ 通常のテーブルとは異なり、DBに永続的に残らない
✅ 同じ名前の通常テーブルが存在していても、影響を受けない
具体的な利用シーン:
・一時的なデータ集計
・クエリの高速化(JOINやサブクエリを回避する)
・バッチ処理の中間データ保存
では、PostgreSQLとMySQLの具体的な使い方を見ていきましょう。
PostgreSQLのテンポラリテーブル
作成方法
PostgreSQLでは、CREATE TEMP TABLE
または CREATE TEMPORARY TABLE
を使います。
CREATE TEMP TABLE temp_users (
id SERIAL PRIMARY KEY,
name TEXT
);
データの挿入・参照
INSERT INTO temp_users (name) VALUES ('Alice'), ('Bob');
SELECT * FROM temp_users;
削除方法
- セッション終了時に自動削除
- 明示的に削除する場合は
DROP TABLE
(テンポラリテーブルに関わらずテーブルを削除する時に使用する)
DROP TABLE temp_users;
ON COMMIT オプション
PostgreSQLでは、ON COMMIT
を指定すると、トランザクション終了時の挙動を制御できます。
CREATE TEMP TABLE temp_orders (
id SERIAL PRIMARY KEY,
total NUMERIC
) ON COMMIT DROP;
ON COMMIT DELETE ROWS
: トランザクション終了時にデータのみ削除ON COMMIT DROP
: トランザクション終了時にテーブル自体を削除
MySQLのテンポラリテーブル
作成方法
MySQLでは、CREATE TEMPORARY TABLE
を使います。
CREATE TEMPORARY TABLE temp_users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
データの挿入・参照
INSERT INTO temp_users (name) VALUES ('Alice'), ('Bob');
SELECT * FROM temp_users;
削除方法
- セッション終了時に自動削除
- 明示的に削除する場合は
DROP TABLE
DROP TABLE temp_users;
MySQL特有の注意点
- 同名の通常テーブルがある場合、テンポラリテーブルが優先される
- 別のセッション(接続)からは見えない
PostgreSQL vs MySQL テンポラリテーブルの違い
PostgreSQL | MySQL | |
---|---|---|
作成方法 | CREATE TEMP TABLE | CREATE TEMPORARY TABLE |
削除タイミング | セッション or トランザクション終了時 | セッション終了時 |
ON COMMIT オプション | あり (DROP , DELETE ROWS ) | なし |
永続テーブルと同名可否 | NG(スキーマが異なる) | OK(TEMP優先) |
まとめ
PostgreSQLとMySQLのテンポラリテーブルには、似ている点と異なる点があります。
🔹 共通点
- 一時的なデータ保存ができる
- セッション終了時に削除される
🔹 違い
- PostgreSQLは
ON COMMIT
でトランザクションごとの動作を制御できる - MySQLでは通常テーブルと同じ名前のテンポラリテーブルを作成可能
どちらも有名なデータベース管理システム(DBMS)ですが、
異なる部分もあるため、実際に動かしながら覚えていくと良いと思います!