勉強前イメージ
DBのなにかの機能?
調査
ストアドプロシージャ とは
データベースに対する処理をプログラムにめまとめてRDBMSに保存したものになります。
論理的に複雑なSQLの呼び出しを一つの処理単位にまとめて名前で呼び出せるようになっており、
繰り返しや条件分岐などの構造を持つこともあります。
ストアドプロシージャのメリット
- SQLを一つずつ発行しなくてよい
ストアドプロシージャに保存されているので
複数SQLがあっても1つの処理にまとめることができる
- トラフィックの削減
外部からSQLを発行するに比べたら
SQLの解析が完了している状態で保存されているため高速に実行でき、
出力までの時間やトラフィックに関しても削減できる
Mysqlでストアドプロシージャやってみる
以下のようなテーブルを作成しました
mysql> select * from user;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | Bob | 30 |
| 2 | Saki | 24 |
| 3 | Natu | 25 |
| 4 | Mery | 40 |
+------+------+------+
- プロシージャの作成
例では、 test_procedure
という名前をつけて arg_age
という定義をしています。
CREATE PROCEDURE test_procedure(IN arg_age int)
SELECT * FROM user WHERE age = arg_age;
- プロシージャの確認
SHOW CREATE PROCEDURE test_procedure\G
mysql> SHOW CREATE PROCEDURE test_procedure\G
*************************** 1. row ***************************
Procedure: test_procedure
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `test_procedure`(IN arg_age int)
SELECT * FROM user WHERE age = arg_age
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
- プロシージャの実行
CALL test_procedure(25);
mysql> CALL test_procedure(25);
+------+------+------+
| id | name | age |
+------+------+------+
| 3 | Natu | 25 |
+------+------+------+
1 row in set (0.00 sec)
- プロシージャの削除
DROP PROCEDURE test_procedure;
勉強後イメージ
実際に自分で動かしてみてイメージ湧いたかも。
↑で言えば SELECT * FROM user WHERE age = ?
の ? だけを後から変更して取れるようになるってことか
わかりやすいし便利ー