首頁  >  文章  >  資料庫  >  如何實作 MySQL 觸發器以在插入和更新事件時更新兩個表中的字數?

如何實作 MySQL 觸發器以在插入和更新事件時更新兩個表中的字數?

DDD
DDD原創
2024-11-19 09:14:02504瀏覽

How to Implement MySQL Triggers for Updating Word Counts in Two Tables on Insert and Update Events?

插入/更新事件的MySQL 觸發器

場景:

場景:
  • 考慮兩個表, ext_words 和ext_words_count,其中ext_words儲存單字,ext_words_count 追蹤 ext_words 中每個單字的計數。目的是建立一個觸發器:
當 ext_words 中的單字更新時更新 ext_words_count.count。

如果 ext_words_count 中不存在該單字,則將其插入到 ext_words_count 中,並將計數設為 1。

初始嘗試:
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 表上的每次插入操作後執行。

其他注意事項:
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 ;

為了處理插入,也建議為INSERT 操作使用單獨的觸發器:

此觸發器只是將單字插入ext_words_count 中,而不考慮它是否已經存在。 INSERT IGNORE 語句確保忽略重複插入。

結論:透過組合插入和更新觸發器或使用帶有條件語句的單一觸發器,可以實現追蹤 MySQL 表中字數的所需功能。

以上是如何實作 MySQL 觸發器以在插入和更新事件時更新兩個表中的字數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn