插入/更新事件的 MySQL 触发器
场景:
考虑两个表, 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 中的现有单词,无法插入新单词。
更新了条件语句的方法:
使用条件语句,它是可以将插入和更新操作组合到单个触发器中:
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 表中字数的所需功能。
以上是如何实现 MySQL 触发器以在插入和更新事件时更新两个表中的字数?的详细内容。更多信息请关注PHP中文网其他相关文章!