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つのテーブルへのデータ登録を完了させることができます。関連するテーブルへ同一トランザクション的な流れでデータを投入したい場合に非常に便利な手法ですので、ぜひ活用してみてください。
-
JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法
一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId