SQLで一時テーブルを作成する方法
一時テーブルの概要
- 一時テーブルは、同じクライアントセッションでさらに使用できる一時データを格納するために使用されるテーブルです。
- デフォルトでは、クライアントセッションが終了すると、一時テーブルは削除されます。
- 一時テーブルは、ステートメント「DROPTABLE」を使用して明示的に削除できます。 このテーブルには、作成者のみがアクセスできます。
- 同じセッションに複数の一時テーブルが存在する可能性がありますが、同じセッションにある場合は、異なる名前が含まれている必要があります。ただし、一時テーブルが別のセッションにある場合は、テーブルが同じ名前で存在する可能性があります。
- 一時テーブルには、同じデータベース内の通常のテーブルと同じ名前を付けることができます。このような条件が存在する場合、一時テーブルの作成後、実行されるすべてのクエリは、通常のテーブルではなく一時テーブルを参照するようになります。ただし、同じ名前で作成されたこの一時テーブルが削除されると、通常のテーブルにアクセスできるようになり、クエリは通常のテーブルを参照するようになります。
- 一時テーブルの作成
構文:
CREATE TEMPORARY TABLE TABLENAME(column_name1データ型(サイズ)、column_name2データ型(サイズ)、column_nameNデータ型(サイズ));
例:
そのデータベースには、「employeedb」という名前のデータベースと「employee」という名前のテーブルがすでにあります。次に、同じ名前「employee」の一時テーブルを作成します。
mysql> USE employeedb; Database changed mysql> CREATE TEMPORARY TABLE employee(Emp_ID INT, Emp_Name VARCHAR(20),Emp_Salary INT); Query OK, 0 rows affected (0.32 sec) mysql> SELECT *FROM employee; Empty set (0.00 sec) mysql> INSERT INTO employee VALUES(1,"Mayuri",45000); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO employee VALUES(2,"Sakshi",50000); Query OK, 1 row affected (0.04 sec) mysql> SELECT *FROM employee; +--------+----------+------------+ | Emp_ID | Emp_Name | Emp_Salary | +--------+----------+------------+ | 1 | Mayuri | 45000 | | 2 | Sakshi | 50000 | +--------+----------+------------+ 2 rows in set (0.00 sec)
- これで、データベース「employeedb」に「employee」という名前の新しいテーブルが作成されました。
- したがって、employeeテーブルからデータを取得しようとしたときに一時テーブルを作成した直後に、空の結果セットが取得されました。これは、SELECTクエリで指定されたemployeeテーブルが、既存のテーブル「employee」ではなく、新しく作成された一時テーブル「employee」を参照しているために発生します。
- その後、employeeテーブルに対してINSERTクエリを実行すると、一時テーブルの作成後にこのクエリを実行するため、このクエリも一時テーブル「employee」に対して実行されます。
- 一時テーブルを削除する
構文:
DROP TABLE TABLENAME;
例:
次に、「employee」という名前の一時テーブルを削除します。
mysql> SELECT *FROM employee; +--------+----------+------------+ | Emp_ID | Emp_Name | Emp_Salary | +--------+----------+------------+ | 1 | Mayuri | 45000 | | 2 | Sakshi | 50000 | +--------+----------+------------+ 2 rows in set (0.00 sec) mysql> DROP TABLE employee; Query OK, 0 rows affected (0.08 sec) mysql> SELECT *FROM employee; +--------+----------+------------+ | Emp_ID | Emp_Name | Emp_Salary | +--------+----------+------------+ | 1 | Mayuri | 40000 | | 2 | Mayuri | 40000 | | 3 | Mayuri | 40000 | | 4 | Mayuri | 40000 | | 5 | Mayuri | 40000 | +--------+----------+------------+ 5 rows in set (0.09 sec)
- SELECTクエリを実行すると、一時テーブルの作成後にこのクエリを実行したため、出力として2つのレコードが取得されます。したがって、このSELECTクエリは一時テーブルで操作されます。
- その後、ドロップクエリを実行しました。 DROPコマンドを使用すると、新しく作成された従業員テーブル(一時テーブル)が削除されます。
- ここでも、SELECTクエリを実行すると、一時テーブルがデータベースから既に削除されているため、一時テーブルではなく従業員テーブル(元のテーブル)で操作されるようになります。