ホームページ >データベース >mysql チュートリアル >挿入/更新シナリオで MySQL トリガーを使用して単語数を効率的に維持する方法

挿入/更新シナリオで MySQL トリガーを使用して単語数を効率的に維持する方法

DDD
DDDオリジナル
2024-11-11 22:33:03509ブラウズ

How to Efficiently Maintain Word Counts Using MySQL Triggers in Insert/Update Scenarios?

挿入/更新シナリオでの効率的なデータ操作のための MySQL トリガー

2 つのテーブル ext_words と ext_words_count について考えます。目標は、ext_words テーブルが更新されるたびに ext_words_count の単語数を維持するトリガーを作成することです。

このタスクでは、最初に単一のトリガーを使用しようとしました:

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 に存在しない場合を考慮していませんでした。これに対処するために、挿入操作と更新操作に別個のトリガーを使用することを検討しました。

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 ;

DELIMITER $$
CREATE TRIGGER update_word 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 ;

挿入トリガーは正常に機能しているにもかかわらず、更新トリガーは依然としてカウントをインクリメントできませんでした。

最終的には、単一のトリガーで条件文を使用する代替ソリューションを発見しました:

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。そうでない場合は、その単語がテーブルに挿入されます。それ以外の場合は、対応する単語数が増加します。条件ステートメントを活用することで、単一のトリガーを使用して単語数を効率的に維持できるようになりました。

以上が挿入/更新シナリオで MySQL トリガーを使用して単語数を効率的に維持する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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