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

MySQLストアドプロシージャでDELETEクエリを実装する方法

MySQLストアドプロシージャでDELETEクエリを実装する方法

MySQLのストアドプロシージャを利用すれば、削除処理をひとつにまとめて再利用しやすくなり、パラメータを通じて動的に値を渡すことも可能です。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ内でDELETEクエリを実行するまでの手順を解説します。

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1464
   -> (
   -> Id int,
   -> FirstName varchar(20)
   -> );
Query OK, 0 rows affected (0.51 sec)

2. テーブルへのレコード挿入

insertコマンドを使って、テーブルにレコードを追加します。

mysql> insert into DemoTable1464 values(101,'Chris Brown');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1464 values(102,'John Doe');
Query OK, 1 row affected (0.09 sec)

select文でテーブル内の全レコードを表示して確認してみます。

mysql> select * from DemoTable1464;

実行すると、次のような結果が得られます。

+------+-------------+
| Id   | FirstName   |
+------+-------------+
|  101 | Chris Brown |
|  102 | John Doe    |
+------+-------------+
2 rows in set (0.00 sec)

3. DELETEクエリを含むストアドプロシージャの作成

続いて、DELETEクエリを実装したストアドプロシージャを作成します。INパラメータとしてIdとFirstNameを受け取り、両方が一致するレコードだけを削除する仕組みです。

mysql> DELIMITER //
mysql> CREATE PROCEDURE delete_demo(IN local_Id int, IN local_Name varchar(20))
   -> BEGIN
   ->   delete from DemoTable1464
   ->   where Id=local_Id and
   ->     FirstName=local_Name;
   -> END //
Query OK, 0 rows affected (0.24 sec)
mysql> DELIMITER ;

ポイント: ストアドプロシージャ内では複数のSQL文を扱うため、文の区切り文字をデフォルトの「;」から「//」へ変更しています。これにより、プロシージャ本体の中に含まれるセミコロンが誤って文の終端と解釈されるのを防げます。定義が完了したら、「DELIMITER ;」で元に戻すのを忘れないようにしましょう。

4. ストアドプロシージャの実行

作成したストアドプロシージャは、CALLコマンドで呼び出せます。Id「102」かつFirstNameが「John Doe」のレコードを削除してみます。

mysql> call delete_demo(102,'John Doe');
Query OK, 1 row affected, 1 warning (0.11 sec)

5. 削除結果の確認

もう一度テーブルの内容を確認しましょう。

mysql> select * from DemoTable1464;

実行すると、次のように対象レコードが削除されていることが分かります。

+------+-------------+
| Id   | FirstName   |
+------+-------------+
|  101 | Chris Brown |
+------+-------------+
1 row in set (0.00 sec)

まとめ

このように、ストアドプロシージャとパラメータを組み合わせれば、条件を指定した柔軟なDELETE処理を簡単に実装できます。削除ロジックをアプリケーション側ではなくデータベース側に持たせることで、処理の共通化や保守性の向上も期待できるので、ぜひ活用してみてください。

  1. MySQLストアドプロシージャでIF-ELSEを実装する方法

    MySQLのストアドプロシージャ内で条件分岐を行いたい場合、IF-ELSE構文を使用します。この記事では、基本構文から実際のストアドプロシージャの作成・実行まで、サンプルコード付きでわかりやすく解説します。IF-ELSEの基本構文ストアドプロシージャ内でif-elseを実装するには、以下の構文を使用します。if yourCondition then yourStatement1; else yourStatement2; end if;条件式(yourCondition)が真(TRUE)の場合は最初のステートメントが実行され、偽(FALSE)の場合はelse以降のステートメント

  2. MySQLストアドプロシージャ内で動的SQLクエリを実装する方法

    ストアドプロシージャ内で動的SQLクエリを実行するには、PREPARE STATEMENT(プリペアドステートメント)の仕組みを利用します。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable2033 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (1.61 sec)2. レコードの挿入INSERTコマン