こんにちは。CTOの馬場です。
勝手にノウハウ公開シリーズです。
(自分では検証してないけど、本人許可のもと聞いた話を書いちゃうシリーズ)
MySQLのトリガーの動作がよくわからなかったので、検証しました。
確認したのは MySQL 5.1.66 です。
- ギモン1: トリガーの実行に時間がかかる場合、トリガー発火の元となったクエリはトリガーの終了を待つのか?
- ギモン2: トリガーのなかでselect→insertとかしても大丈夫?
ギモン1: トリガーの実行に時間がかかる場合、トリガー発火の元となったクエリはトリガーの終了を待つのか?
コタエ: 待ちます
なので、オンライン処理で時間がかかるトリガーを組み込むと、DBも接続元appも接続数がえらいことに!なるかもしれません。
ギモン2: トリガーのなかでselect→insertとかしても大丈夫?
コタエ: トリガーだからと特別に意識せず、ふつうにやれば大丈夫!
発火元クエリのトランザクションの一部として処理されるようです。
ただし、トリガーの中で独自にトランザクションは使えないようです。
結論
RDBのご利用は計画的に!
トリガー内でトランザクション競合が起きたりすると大事故になりますよきっとマジで。