MySQL 触发器,用于在插入/更新场景中进行高效数据操作
考虑两个表: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中文网其他相关文章!