MySQLTweet皆さん、ご無沙汰しております。パソコン周辺機器にお金をかけはじめている笹亀です。エンジニアはパソコンが商売道具なので、やはり使いやすい物を使いたくなるのは自然な事ですね。Mac用キーボード(会社の人から売ってもらいましたw今回はTriggerについてご紹介したいとおもいます。Triggerとは、データの変更などのイベントによってあらかじめ指定した処理を自動的に実行する機能です。最近使用しているデータベースには必ず備えてある機能です。Oracle,Postgres,MySQLでも当たり前のようにあります。実際にはどのようなときに使用するものなのでしょうか?・特定のテーブルに対しての処理のログをとるため・特定のテーブルのバックアップをとる・子テーブルの内容が更新されたときに関連する親テーブルの情報を変更したいときこのような場面ではTriggerを使うと便利かもしれません。それでは、実際に今回はMySQLを使用してご説明していきたいとおもいます。簡単なテーブルを作成しておきます。CHARSET=utf8;カテゴリテーブルにはproduct_countというカテゴリに属する商品数をセットしておくフィールドを用意しておきます。今回はproductテーブルにinsertしたときに自動的にこのフィールドに商品数を更新するTriggerを記述していきます。トリガ名」で作成します。トリガ名」で行えます。Triggerの作成は権限が無いユーザでは作成できないので、管理者(root)で作成しましょう。それでは、早速下記のように作成してみます。triggers;」とコマンドで確認できます上記のTriggerの意味は、product_tテーブルにINSERTされた後にBEGINからENDまでの処理を行うという意味になります。BEGINからENDまでの処理は登録した商品のカテゴリIDを使用して、category_tテーブルのproduct_countにカテゴリに属する商品数を更新するSQLです。「NEW.category_id」は登録した商品のカテゴリIDになります。ちなみに「OLD.category_id」で更新前のカテゴリIDを参照できます。注意点としては、トリガ内で指定できる使用できる構文にはいろいろな制約があります。(ここの例だとproduct_t)が行えません。詳しくは下記に記述されていますので、そちらを参照ください。http://dev.mysql.com/doc/refman/5.1/ja/routine-restrictions.htmlそれでは実際に、insert文を発行して確認しましょう。カテゴリデータをいくつか準備します。VALUES('3','category_name3',0);次に商品を登録していきます。Triggerの処理で商品を登録すると商品に属したカテゴリのproduct_countが更新されるはずです。VALUES('5','1','product_name5');category_tテーブルを確認するとカテゴリごとの登録されている商品数が更新されていますね。このようにしてTriggerを作成していきます。Triggerを使用する点の注意ですが、SQLの負荷を考えて作成を行わないとパフォーマンスが落ちる場合もあります。キーにインデックスを張らずに大量のデータから検索した結果を更新するときなどです。そのようなことを考慮して使用する分にはTriggerの機能をフルに生かせるのではないでしょうか。皆さんもこの機会に是非、Triggerを使ってみてください。■オマケこんな感じでプログラムっぽくIF文でSQLの処理を分けることもできます。商品を更新したときに件数を調べて0件じゃないときと0のときで処理を分けてみました。更新前のカテゴリIDの商品数と更新後のカテゴリIDの商品数を更新するTriggerです。※IF文をかかなくても書けますが、ご愛嬌で。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。