挿入/更新時イベントの MySQL トリガー
シナリオ:
2 つのテーブルについて考えます。 ext_words と ext_words_count。 ext_words は単語を保存し、 ext_words_count は ext_words 内の各単語の数を追跡します。目的は、次のトリガーを作成することです。
初期試行:
更新のみを処理する提案された最初のトリガーは次のとおりです:
DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;
ただし、このトリガーは ext_words_count 内の既存の単語のみを更新し、新しい単語の挿入に失敗します。
条件付きステートメントを使用した更新されたアプローチ:
条件付きステートメントを使用すると、次のようになります。挿入操作と更新操作を 1 つのトリガーに組み合わせることができます。
DELIMITER $$ CREATE TRIGGER update_count AFTER INSERT ON ext_words FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN INSERT INTO ext_words_count (word) VALUES (NEW.word); ELSE UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END IF; END $$ DELIMITER ;
このトリガーは、単語が ext_words_count にすでに存在するかどうかを評価します。そうでない場合、トリガーは単語を挿入します。それ以外の場合は、カウントが更新されます。トリガーは、ext_words テーブルに対するすべての挿入操作の後に実行されます。
追加の考慮事項:
挿入を処理するには、INSERT 操作用の別のトリガーも推奨されます。
DELIMITER $$ CREATE TRIGGER insert_word AFTER INSERT ON ext_words FOR EACH ROW BEGIN INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word); END; $$ DELIMITER ;
このトリガーは、単語が既に存在するかどうかを考慮せずに、単純に単語を ext_words_count に挿入します。 INSERT IGNORE ステートメントは、重複した挿入が確実に無視されるようにします。
結論:
挿入トリガーと更新トリガーを組み合わせたり、単一のトリガーを条件付きステートメントとともに使用したりすることで、次のことが可能になります。 MySQL テーブルの単語数を追跡するために必要な機能を実装します。
以上が挿入イベントと更新イベントで 2 つのテーブルのワード数を更新するための MySQL トリガーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。