MySQL 一時テーブルとセッションデータ

MySQLBeginner
オンラインで実践に進む

はじめに

この実験 (lab) では、MySQL で一時テーブルを扱う方法を学びます。特に、単一セッション内での作成と使用に焦点を当てます。まず、MySQL サーバーに接続し、temp_employees という名前の一時テーブルを作成します。

この実験を通して、このテーブルにデータを挿入し、情報を取得するためにクエリを実行し、別のセッションからアクセスを試みることで、そのセッション固有のスコープを探求します。最後に、一時テーブルを明示的に削除する方法を学び、その自動クリーンアッププロセスを理解します。この実験は、セッション固有のデータ操作に一時テーブルをどのように使用できるかについての実践的な理解を提供します。

MySQL に接続し、一時テーブルを作成する

このステップでは、MySQL サーバーに接続し、最初の一時テーブルを作成します。一時テーブルは、単一のクライアントセッションの期間中のみ存在する特別なテーブルです。セッションが終了すると自動的に削除されるため、中間結果や短時間しか必要とされないデータの保存に役立ちます。

まず、LabEx VM でターミナルを開きます。以下のコマンドを使用して、root ユーザーとして MySQL サーバーに接続します。

sudo mysql -u root

コマンドを実行すると、mysql> のような MySQL プロンプトが表示されるはずです。これは、MySQL サーバーに正常に接続されており、SQL コマンドを実行できることを示しています。

テーブルを作成する前に、データベースを選択する必要があります。ここでは、テスト用にデフォルトで利用可能な test データベースを使用します。存在しない場合は、以下のコマンドで作成されます。

CREATE DATABASE IF NOT EXISTS test;
USE test;

次に、temp_employees という名前の一時テーブルを作成します。構文は通常のテーブルを作成する場合と似ていますが、TEMPORARY キーワードを含める必要があります。

mysql> プロンプトで以下の SQL コマンドを実行します。

CREATE TEMPORARY TABLE temp_employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    department VARCHAR(255)
);

このコマンドは、3 つの列を持つ一時テーブルを作成します。

  • id: 主キーとして機能し、新しい行ごとに自動的にインクリメントされる整数です。
  • name: 従業員の名前を格納するための文字列(最大 255 文字)です。
  • department: 従業員の部署を格納するための文字列(最大 255 文字)です。

現在のセッション内で一時テーブルが正常に作成されたことを確認するには、DESCRIBE コマンドを使用します。

DESCRIBE temp_employees;

出力には temp_employees テーブルの構造が表示され、その列とデータ型が確認できます。

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int          | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| department | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

この出力は、temp_employees テーブルが現在の MySQL セッションで使用できる状態であることを確認します。

一時テーブルへのデータ挿入とクエリ実行

temp_employees テーブルを作成したので、通常のテーブルと同様に操作できます。このステップでは、データ挿入と、そのデータのクエリを行います。

前のステップから引き続き MySQL セッションにいるはずで、mysql> プロンプトが表示されている状態です。

INSERT INTO ステートメントを使用して、temp_employees テーブルにいくつかの行を挿入しましょう。これらのコマンドを一つずつ実行してください。

INSERT INTO temp_employees (name, department) VALUES ('Alice Smith', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Bob Johnson', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Charlie Brown', 'IT');

これらのコマンドは、3 つの従業員レコードを一時テーブルに追加します。

挿入したデータを表示するには、SELECT ステートメントを使用します。アスタリスク (*) は「すべての列」を意味するワイルドカードです。

SELECT * FROM temp_employees;

このコマンドは、temp_employees テーブルからすべての列と行を取得します。出力には挿入したデータが表示されるはずです。

+----+---------------+------------+
| id | name          | department |
+----+---------------+------------+
|  1 | Alice Smith   | Sales      |
|  2 | Bob Johnson   | Marketing  |
|  3 | Charlie Brown | IT         |
+----+---------------+------------+
3 rows in set (0.00 sec)

WHERE 句を使用して結果をフィルタリングすることもできます。たとえば、「IT」部門の従業員のみを見つけるには、次のクエリを実行します。

SELECT name FROM temp_employees WHERE department = 'IT';

出力には、条件に一致する従業員の名前のみが表示されます。

+---------------+
| name          |
+---------------+
| Charlie Brown |
+---------------+
1 row in set (0.00 sec)

これにより、標準的なデータ操作およびクエリ操作が一時テーブルで期待どおりに機能することが示されます。

一時テーブルのスコープを理解する

一時テーブルの重要な特徴は、セッション固有のスコープを持つことです。これは、ある MySQL セッションで作成された一時テーブルは、両方のセッションが同じデータベースに接続されていても、別のセッションでは表示されたりアクセスされたりしないことを意味します。このステップでその動作を実証します。

最初のターミナルウィンドウで、現在の MySQL セッションを開いたままにしておきます。

次に、新しいターミナルウィンドウを開きます。デスクトップの背景を右クリックして「ここにターミナルを開く」を選択することで実行できます。

この新しいターミナルで、再度 MySQL サーバーに接続します。これにより、2 番目の独立したセッションが作成されます。

sudo mysql -u root

コマンドを実行すると、mysql> のような MySQL プロンプトが表示されるはずです。これは、MySQL サーバーに正常に接続されており、SQL コマンドを実行できることを示しています。

次に、test データベースを選択します。

USE test;

これで、それぞれが独自の MySQL セッションを持つ 2 つの別々のターミナルがあります。この新しいセッションで、最初のセッションで作成した temp_employees テーブルをクエリしてみてください。

SELECT * FROM temp_employees;

このセッションでは別のセッションで作成された一時テーブルに関する知識がないため、エラーメッセージが表示されます。

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

このエラーは、temp_employees テーブルが作成されたセッションに分離されていることを確認します。テーブルを記述しようとすると、同じエラーが発生します。

DESCRIBE temp_employees;
ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

この動作は、一時テーブルの仕組みの基本であり、他のユーザーやプロセスに干渉することなく一時データを安全に保存できる理由です。

これで、この新しいターミナルウィンドウを閉じて、元のターミナルに戻ることができます。

一時テーブルの削除とセッション終了

一時テーブルは、MySQL セッションが終了すると自動的に削除されます。しかし、DROP TEMPORARY TABLE ステートメントを使用して明示的に削除することもできます。セッションが終了する前にテーブルの使用を終えた場合は、リソースを解放するため、これが良い習慣です。

元のターミナルウィンドウに戻り、temp_employees テーブルが存在する状態になっているはずです。

一時テーブルを明示的に削除するには、mysql> プロンプトで次のコマンドを使用します。

DROP TEMPORARY TABLE temp_employees;

正常に削除されると、Query OK というメッセージが表示されます。テーブルが削除されたことを確認するには、再度クエリを実行してみてください。

SELECT * FROM temp_employees;

これで「Table doesn't exist」というエラーが表示されるはずです。これは、テーブルがこのセッションで利用できなくなったことを確認します。

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

最後に、MySQL セッションを終了するには、exit と入力して Enter キーを押します。

exit

これにより、MySQL サーバーへの接続が閉じられ、通常のターミナルプロンプトに戻ります。明示的に一時テーブルを削除しなかった場合でも、この時点で自動的に削除されていました。

まとめ

この実験では、MySQL で一時テーブルを扱うための基本を学びました。MySQL サーバーへの接続、CREATE TEMPORARY TABLE を使用した一時テーブルの作成、INSERT INTO を使用したデータの投入を成功させました。その後、SELECT クエリでこれらのデータを取得する練習を行いました。

重要な点として、一時テーブルが他のセッションから見えないことを実証することで、一時テーブルのセッション固有のスコープを探求しました。最後に、DROP TEMPORARY TABLE を使用して一時テーブルを明示的に削除する方法を学び、セッションが終了すると自動的にクリーンアップされることを理解しました。一時テーブルは、データベースワークフローにおいてセッション固有のデータや中間結果を管理するための貴重なツールです。