⑭テンポラリテーブル
テンポラリテーブルとは何か?
一時表をサポートするRDBMSがあります。テンポラリテーブルは、一般的なSQL Serverテーブルで使用できるものと同じ選択、更新、および結合機能を使用して、中間結果を格納して処理できる優れた機能です。
一時テーブルは、一時的なデータを保持するために非常に便利な場合もあります。一時テーブルで最も重要なことは、現在のクライアントセッションが終了したときに削除されることです。
テンポラリテーブルは、MySQLバージョン3.23以降で利用できます。3.23よりも古いバージョンのMySQLを使用している場合は、一時テーブルを使用することはできませんが、ヒープテーブルを使用することはできます。
前述のように、テンポラリ・テーブルは、セッションが存続している間だけ持続します。PHPスクリプトでコードを実行すると、スクリプトの実行が終了すると一時テーブルが自動的に破棄されます。MySQLクライアントプログラムを使用してMySQLデータベースサーバーに接続している場合、クライアントを閉じるか手動でテーブルを破棄するまで、一時テーブルが存在します。
例
次に、一時テーブルの使用方法を示す例を示します。
mysql> CREATE TEMPORARY TABLE SALESSUMMARY ( -> product_name VARCHAR(50) NOT NULL -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00 -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00 -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 ); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO SALESSUMMARY -> (product_name, total_sales, avg_unit_price, total_units_sold) -> VALUES -> ('cucumber', 100.25, 90, 2); mysql> SELECT * FROM SALESSUMMARY; +--------------+-------------+----------------+------------------+ | product_name | total_sales | avg_unit_price | total_units_sold | +--------------+-------------+----------------+------------------+ | cucumber | 100.25 | 90.00 | 2 | +--------------+-------------+----------------+------------------+ 1 row in set (0.00 sec)
SHOW TABLESコマンドを発行すると、テンポラリ・テーブルはリストにリストされません。ここで、MySQLセッションからログアウトしてからSELECTコマンドを発行すると、データベースで利用可能なデータが見つかりません。一時テーブルでさえも存在しません。
テンポラリテーブルの削除
デフォルトでは、データベース接続が終了すると、すべての一時テーブルがMySQLによって削除されます。それでも削除したい場合は、DROP TABLEコマンドを発行して削除することができます。
次に、一時テーブルを削除する例を示します。
mysql> CREATE TEMPORARY TABLE SALESSUMMARY ( -> product_name VARCHAR(50) NOT NULL -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00 -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00 -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 ); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO SALESSUMMARY -> (product_name, total_sales, avg_unit_price, total_units_sold) -> VALUES -> ('cucumber', 100.25, 90, 2); mysql> SELECT * FROM SALESSUMMARY; +--------------+-------------+----------------+------------------+ | product_name | total_sales | avg_unit_price | total_units_sold | +--------------+-------------+----------------+------------------+ | cucumber | 100.25 | 90.00 | 2 | +--------------+-------------+----------------+------------------+ 1 row in set (0.00 sec) mysql> DROP TABLE SALESSUMMARY; mysql> SELECT * FROM SALESSUMMARY; ERROR 1146: Table 'TUTORIALS.SALESSUMMARY' doesn't exist