沈黙?それが正しい答えなんか?
ぼく「つまり、トリガーっていうのがストアドプロシージャーってことなんですか?」
先輩「・・・・・・。」
ぼく「(・・・沈黙?それが正しい答えなんか。)」
ぼく「(いや、流石にそれが答えじゃないことぐらいは分かるで・・・。)」
ぼく「(多分、エンジニアに必要なのは洞察力やということを暗に教えてくれてるんやろうな・・・。)」
ぼく「(ほんまにええ先輩やで!)」
ぼく「わかりました!とりあえずやってみます!」
先輩「はい。」
とにかく調べてみる。
ぼく「ほーん・・・。」
ぼく「トリガーいうんはDBのテーブルにあるデータが更新されたときに走るプロシージャのことなんか」
ぼく「データの更新ってINSERT,UPDATE,DELETEが対象になるんやな。」
ぼく「プロシージャってそもそもなんやねん。」
ぼく「戻り値のない関数のことか、草属性のポケモンと名前似てるやん。」
ぼく「てことは、対象のテーブルのデータが更新されたタイミングにトリガーを設定すれば自分の更新したいテーブルに何かできるってことなんか。」
ぼく「で、ストアドプロシージャーはなんや・・・。」
ぼく「複数のSQLを一つにまとめてRDBMSに、この場合はMySQLやな?そこに保存して実行できるもの。」
ぼく「めっちゃ便利やん。」
タイミングとかある。
ぼく「データ更新のタイミングいうけど、更新する前と後があるやん・・・。それも指定できんのかな?」
ぼく「ふんふん。BEFOREとAFTERでトリガーの起動タイミングを指定するねんな。」
ぼく「それで?データ更新は起動タイミングを記載した後にINSERT,UPDATE,DELETEのどれかを指定すると・・・。」
ぼく「対象となるテーブルはどこで設定すればええんや?」
ぼく「データの更新を記載した後にON 対象となるテーブル名みたいな感じで書くねんな。」
ぼく「で、使ってるのはMySQLやからFOR EACH ROWとその後に書くと・・・。」
ぼく「なるほどね。とりあえず作ってみるか。」
DELIMITER //
CREATE TRIGGER test1
BEFORE UPDATE ON items
FOR EACH ROW
BEGIN
CALL 呼びたいストアドプロシージャー(引数);
END
//
DELIMITER ;
ぼく「これでitemsテーブルを更新するとストアドプロシージャーが自動で実行されんのか・・・。」
トリガーの実行
ぼく「トリガーを実行するためには、自分で設定したテーブルの更新をしたらええねんな。」
UPDATE
items
SET
value=100
WHERE
Items.id = 1;
ぼく「おお、ほんまにトリガーが起動して、自分が呼び出したいストアドプロシージャーが動いてるで!」
トリガーの削除
ぼく「削除したいときは、DROP TRIGGERに自分が作成したトリガーを指定するねんな。」
DROP TRIGGER test1;
ぼく「トリガーと結びつけたitemsテーブルが削除されたときもトリガーは、一緒に削除されんのか。」
ストアドプロシージャーとトリガーの違い
ぼく「トリガーで設定したタイミングにストアドプロシージャーを動かせるようになったで!」
ぼく「トリガーもプロシージャーやし、ストアドプロシージャーもそうやん・・・。」
ぼく「データベースで更新タイミングがあったときに実行されるストアドプロシージャーのことを・・・。」
ぼく「トリガーと呼ぶ。」
ぼく「先輩の沈黙もあながち答えとして間違ってないやん」
終わり