Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLの一時テーブルについてまとめています。

SQLの一時テーブル作成はcreate TEMPORARY tableセッション中のみ存在する特殊テーブル

一時テーブルは同一セッション中のみ存在するテーブルです。セッション終了後は、自動的に削除されます。

下記はMySQLの例です。create TEMPORARYで一時テーブルemployees_tmpを作成後、いったんセッションを終了(MySQLクライアントを終了)し、再接続すると一時テーブルが削除されています。

create TEMPORARY table employees_tmp
select * from employees;

mysql> select * from employees_tmp limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | xGeorgi    | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.01 sec)

mysql> quit
Bye

#mysqlに再接続
mysql> select * from employees_tmp limit 10;
ERROR 1146 (42S02): Table 'employees.employees_tmp' doesn't exist

【関連記事】
MySQLのcreate tableサンプルコード集 カラム定義を自動出力する方法は? 

一時テーブルの仕様はDBMSにより異なります。例えばSQL Serverは一時テーブル名は先頭に「#」をつけて、「#employees_tmp」とするルール。セッション終了後も削除しないかぎり一時テーブルは残る仕様になっています。

トランザクション中で一時テーブルを生成するとrollbackでデータが削除される

トランザクション内で一時テーブルを作成し、rollbackをおこなうと、テーブル自体は残りますが、データは削除されます。

テーブルを作成するcreate TEMPORARY tableはrollback対象にならず、データを複製する部分のみがロールバックされるんですね。

Database changed
#トランザクション開始
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

#一時テーブル作成 データは既存のemployeesを複製
mysql> create TEMPORARY table employees_tmp select * from employees;
Query OK, 300025 rows affected (1.44 sec)
Records: 300025  Duplicates: 0  Warnings: 0

#一時テーブルにデータが存在することを確認
mysql> select * from employees_tmp limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | xGeorgi    | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.01 sec)

#トランザクションをロールバックする
mysql> rollback;
Query OK, 0 rows affected, 1 warning (1.88 sec)

#一時テーブルは存在するが、データが削除されている
mysql> select * from employees_tmp limit 10;
Empty set (0.00 sec)

まとめ

ポテパンダの一言メモ
  • 一時テーブルは、create TEMPORARY tableで作成する
  • セッション終了後は一時テーブルは削除される
  • トランザクション中で一時テーブルを作成しrollbackすると、テーブルは残りデータは削除される

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。