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とも組み合わせれば業務でも使っていけそうです。