ホームページ  >  記事  >  データベース  >  挿入イベントと更新イベントで 2 つのテーブルのワード数を更新するための MySQL トリガーを実装するにはどうすればよいですか?

挿入イベントと更新イベントで 2 つのテーブルのワード数を更新するための MySQL トリガーを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-19 09:14:02485ブラウズ

How to Implement MySQL Triggers for Updating Word Counts in Two Tables on Insert and Update Events?

挿入/更新時イベントの MySQL トリガー

シナリオ:

2 つのテーブルについて考えます。 ext_words と ext_words_count。 ext_words は単語を保存し、 ext_words_count は ext_words 内の各単語の数を追跡します。目的は、次のトリガーを作成することです。

  • ext_words 内の単語が更新されたときに ext_words_count.count を更新します。
  • その単語が ext_words_count に存在しない場合は、その単語を ext_words_count に挿入し、カウントを 1 に設定します。

初期試行:

更新のみを処理する提案された最初のトリガーは次のとおりです:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。