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

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つ(またはそれ以上)のテーブルに同じ値を簡単に挿入できます。アプリケーション側のコードを簡潔にできるだけでなく、処理の一貫性も保ちやすくなるため、関連テーブルへ同時にデータを登録したいケースでぜひ活用してください。

  1. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実

  2. MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法

    MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable