MySQLのストアドプロシージャを1回呼び出すだけで2つのテーブルに値を挿入する方法
MySQLでは、ストアドプロシージャを活用することで、1回の呼び出しで複数のテーブルに値を挿入できます。トランザクション処理や関連データの登録など、同じ値を複数テーブルに記録したい場面で非常に便利です。
ストアドプロシージャの基本構文
2つのテーブルに値を挿入するストアドプロシージャの構文は以下のとおりです。
DELIMITER //
CREATE PROCEDURE yourProcedureName(anyVariableName int)
BEGIN
insert into yourTableName1(yourColumnName1) values(yourVariableName);
insert into yourTableName2(yourColumnName2) values(yourVariableName);
END
//
サンプルテーブルの作成
まず、1つ目のテーブルを作成します。
mysql> create table DemoTable1
-> (
-> StudentScore int
-> );
Query OK, 0 rows affected (0.58 sec)
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable2
-> (
-> PlayerScore int
-> );
Query OK, 0 rows affected (0.52 sec)
ストアドプロシージャの作成
次に、2つのテーブルへ同時に値を挿入するストアドプロシージャを作成します。
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_proc(value int)
-> BEGIN
-> insert into DemoTable1(StudentScore) values(value);
-> insert into DemoTable2(PlayerScore) values(value);
-> END
-> //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;
ここで DELIMITER // を使用しているのは、プロシージャ本体に含まれるセミコロン(;)をMySQLが文の終わりと誤認識しないようにするためです。プロシージャ作成後は、デリミタを通常のセミコロンに戻しておきましょう。
ストアドプロシージャの呼び出し
作成したプロシージャは、CALLコマンドを使って呼び出します。
mysql> call insert_proc(89);
Query OK, 1 row affected (0.29 sec)
この1回の呼び出しにより、値「89」が両方のテーブルに挿入されます。
挿入結果の確認
SELECT文を使って、両テーブルのレコードを確認してみましょう。
mysql> select * from DemoTable1;
+--------------+
| StudentScore |
+--------------+
| 89 |
+--------------+
1 row in set (0.00 sec)
mysql> select * from DemoTable2;
+-------------+
| PlayerScore |
+-------------+
| 89 |
+-------------+
1 row in set (0.00 sec)
まとめ
このように、ストアドプロシージャ内に複数のINSERT文を記述しておけば、1回のCALLで2つ(またはそれ以上)のテーブルに同じ値を簡単に挿入できます。アプリケーション側のコードを簡潔にできるだけでなく、処理の一貫性も保ちやすくなるため、関連テーブルへ同時にデータを登録したいケースでぜひ活用してください。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法
MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable