sql >> データベース >  >> RDS >> Database

SQLで一時テーブルを作成する方法は?

    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クエリを実行すると、一時テーブルがデータベースから既に削除されているため、一時テーブルではなく従業員テーブル(元のテーブル)で操作されるようになります。


    1. 選択した行をPostgresのCSVファイルの値で更新するにはどうすればよいですか?

    2. Oracleエラー処理

    3. Ansibleを使用してスタンドアロンMySQLからGaleraクラスターへの移行を自動化する方法

    4. 'dateAdded'のデフォルト値が無効です