【MySQL】temporaryテーブルについて

スポンサーリンク
temporaryテーブルを使う機会がありましたので書き留めます。

temporaryとは

セッション単位で利用ができるテーブルです。一時テーブルやtmpテーブルとも呼ばれています。
同じ名前のテーブルでもセッションが異なると、まったく別々のテーブルとして扱えます。
セッション単位なので、セッションを切断すると、テーブル自体が削除されます。
temporaryテーブルはセッション単位で管理している点を除けば、ほぼ通常のテーブルと同じ扱いができます。
※自己結合やUNIONはできませんので注意が必要です。
 

temporaryテーブル作成方法

テーブル定義のみを作成

「create temporary table テーブル名」で作成ができます。
create temporary table test_tmp(
col1 int,
col2 varchar(11),
col3 datetime,
col4 boolean,
PRIMARY KEY(col1)
);

一時テーブルを作成し、select結果を追加する

 
create temporary table test_tmp
(PRIMARY KEY(col1))
select * from (
    select 1 col1, 'あいうえお' col2, now() col3, TRUE col4
    union all
        select 2 col1, 'かきくけこ' col2, now() col3, TRUE col4
    union all
        select 3 col1, 'さしすせそ' col2, now() col3, FALSE col4
) X;
 
select * from test_tmp;
col1,col2,col3,col4
1,あいうえお,2019/09/08 19:36:10,1
2,かきくけこ,2019/09/08 19:36:10,1
3,さしすせそ,2019/09/08 19:36:10,0

インデックス

インデックスの追加も可能です。
 
create temporary table test_tmp
(PRIMARY KEY(カラム名))
 
explain select * from test_tmp where col1 = 1;
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,test_tmp,const,PRIMARY,PRIMARY,8,const,1,

yasu
yasu

インデックスを追加する場合はデータを追加したあとに付与しましょう。

追加後に大量データを入れると処理に時間がかかるおそれがあります。

 

temporaryテーブルの更新

通常通り更新もできます。
update test_tmp set col4 = FALSE where col1 = 2;
 
select * from test_tmp;
col1,col2,col3,col4
1,あいうえお,2019/09/08 19:36:10,1
2,かきくけこ,2019/09/08 19:36:10,0
3,さしすせそ,2019/09/08 19:36:10,0

削除も通常と同じようにdelete文で実行可能です。

temporaryテーブルの削除方法

「drop temporary table テーブル名;」で削除できます。
 
drop temporary table test_tmp;
またはセッションを切断してください。
 
select * from test_tmp;
SQL   : #42S02Table ‘test2.test_tmp’ doesn’t exist

使い方

なかなか使う機会が少ないのですが、僕の経験した使い方は以下になります。
 
  • テータ作業などで一回のSQLでの取得、加工が難しい場合
  • ユーザーごとに特定のデータを取得、加工する場合

データ作業によるworkとして使うことが多い気がします。

 

タイトルとURLをコピーしました