← All Articles

MySQLのストアドプロシージャをつかってDeleteをする

Posted on

はじめに

MySQLのストアドプロシージャをつかってデータ更新する方法を調べました。

ここではストアドプロシージャをつかってDeleteを実行してみます。

使用するテーブル

今回は公式のサンプル[world database]にあるテーブル[city]を使用します。

テーブルの構成下記の画像を参照ください。

テーブル構成

実際にやってみた

1) 削除用ストアドプロシージャ delete_city を作成

今回はcityのIDを引数にするストアドプロシージャdelete_cityを定義しました。

DELIMITER //

CREATE PROCEDURE delete_city(IN input_id INT)
BEGIN
  -- エラーになったらロールバックするように設定しておく。
  DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
  BEGIN
    GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
    SELECT @sqlstate, @errno, @text;
    ROLLBACK;
  END;

  -- トランザクションを取得しDeleteする。
  START TRANSACTION;
    DELETE FROM city where ID = input_id;
  COMMIT;

END//
DELIMITER ;

2) プロシージャを実行する

ID:1のデータを削除してみます。 以下のようにcall CALL delete_city(1); を実行後に ID:1が削除されていることがわかります。

mysql> SELECT * FROM city WHERE ID = 1;
+----+-------+-------------+----------+------------+
| ID | Name  | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
|  1 | Kabul | AFG         | Kabol    |    1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.00 sec)

mysql> CALL delete_city(1);
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM city WHERE ID = 1;
Empty set (0.00 sec)

まとめ

ストアドプロシージャをつかってDeleteしてみました。

今回はDeleteを一回するだけでしたが、Updateとも組み合わせれば業務でも使っていけそうです。

参考サイト

公式サンプル取得先

【MySQL】トランザクションを要するストアドプロシージャのテンプレート

MySQLストアドプロシージャ極々サンプル

初心者からのMySQLストアドプロシージャ&ファンクション入門

技術MySQL