[Sy] 【技術メモ】MySQLで初めてストアドプロシージャを作ってみた
2014/04/21
今更感がすごいですが、ちょっと仕事で MySQL の ストアドプロシージャ を作る機会があったのでメモ。
ここでは、サンプルとしてレコード数をただ出力するだけのものを作る手順をまとめました。
1. データベース、テーブルを作成
stored_testというデータベースを作成。
mysql> create database stored_test character set=utf8;
Query OK, 1 row affected (0.00 sec)
id(プライマリキー)と名前を持つ、memberテーブルを作成します。
mysql> create table member
-> (
-> id int(11),
-> name varchar(20),
-> primary key (id)
-> );
Query OK, 0 rows affected (0.03 sec)
テーブルのリストを表示して確認。
mysql> show tables;
+-----------------------+
| Tables_in_stored_test |
+-----------------------+
| member |
+-----------------------+
1 row in set (0.00 sec)
2. とりあえず2件ほどinsert
とりあえずデータを入れときたいので、memberテーブルに適当にinsert。
mysql> insert into member
-> values
-> (1, 'utano'),
-> (2, 'kobayashi');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
select文で確認。
mysql> select * from member;
+----+-----------+
| id | name |
+----+-----------+
| 1 | utano |
| 2 | kobayashi |
+----+-----------+
2 rows in set (0.00 sec)
3. レコード数を出力するストアドプロシージャを作成する
ここが本題。
とりあえず、Hello World的な感じで、memberテーブルの_レコード数を出力_するだけの簡単なストアドプロシージャを作ってみます。
その前に、現時点で登録されているストアドプロシージャをリスト表示してみると、
mysql> show procedure status;
Empty set (0.00 sec)
当然まだないです。
では登録してきます。
mysql> create procedure get_member_count()
-> select count(*) from member;
Query OK, 0 rows affected (0.01 sec)
これでget_member_count()というストアドプロシージャが登録できました。確認してみると、
mysql> show procedure status;
+-------------+------------------+-----------+-------
| Db | Name | Type | ・・・
+-------------+------------------+-----------+-------
| stored_test | get_member_count | PROCEDURE | ・・・
+-------------+------------------+-----------+-------
1 row in set (0.00 sec)
みたいに表示されます。(本当はもっと項目あるけど、長すぎるので省略)
あ、これってDB名があるってことは、すべてのDBのストアドプロシージャが表示されるってことですよね。たぶん。
4. 実行してレコード数を出力させる
登録はできたので、いざ実行。
mysql> call get_member_count();
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
できました。
ストアドプロシージャの基本的な手順はこんな感じです。