MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで1つのクエリを使って2つのテーブルに同時にデータを挿入する方法

はじめに

MySQLではストアドプロシージャを活用することで、実質的に1回のクエリ呼び出しで複数のテーブルへデータを挿入することが可能です。この記事では、実際に2つのテーブルを作成し、それらへ一度にレコードを挿入する手順を順を追って解説します。

1. 最初のテーブルを作成する

まず、学生情報を格納するテーブルを作成します。AUTO_INCREMENTにより、StudentIdが自動的に採番されます。

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(20)
);
Query OK, 0 rows affected (0.56 sec)

2. 2つ目のテーブルを作成する

続いて、クライアント情報を格納する2つ目のテーブルを作成します。

mysql> create table DemoTable2
(
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(20),
    ClientAge int
);
Query OK, 0 rows affected (0.76 sec)

3. 両方のテーブルに挿入するストアドプロシージャを作成

次に、引数として受け取った名前と年齢を、2つのテーブルへそれぞれINSERT文で登録するストアドプロシージャを定義します。DELIMITER // を使って区切り文字を変更している点に注意してください。

mysql> DELIMITER //
    mysql> CREATE PROCEDURE insert_into_twoTables(name varchar(100),age int)
      BEGIN
         INSERT INTO DemoTable(StudentFirstName) VALUES(name);
         INSERT INTO DemoTable2(ClientName,ClientAge) VALUES(name,age);
      END
    //
    Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;

4. ストアドプロシージャを実行する

作成したプロシージャは、CALL コマンドを使って呼び出します。ここでは「Tom(38歳)」というデータを渡してみましょう。

mysql> call insert_into_twoTables('Tom',38);
Query OK, 1 row affected, 1 warning (0.41 sec)

5. 挿入結果を確認する

両方のテーブルに正しくレコードが挿入されたかを確認します。

まず、1つ目のテーブル(DemoTable)の全レコードを表示します。

mysql> select * from DemoTable;

実行結果は以下の通りです。

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | Tom |
+-----------+------------------+
1 row in set (0.00 sec)

続いて、2つ目のテーブル(DemoTable2)の全レコードを表示します。

mysql> select * from DemoTable2;

こちらも正常にデータが登録されていることが分かります。

+----------+------------+-----------+
| ClientId | ClientName | ClientAge |
+----------+------------+-----------+
| 1 | Tom | 38 |
+----------+------------+-----------+
1 row in set (0.00 sec)

まとめ

このように、ストアドプロシージャ内に複数のINSERT文をまとめておけば、アプリケーション側からは CALL 文を1回実行するだけで、2つのテーブルへのデータ登録を完了させることができます。関連するテーブルへ同一トランザクション的な流れでデータを投入したい場合に非常に便利な手法ですので、ぜひ活用してみてください。

  1. JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法

    一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ

  2. Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】

    はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId