挿入/更新シナリオでの効率的なデータ操作のための 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 サイトの他の関連記事を参照してください。