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中文網其他相關文章!