MySQL在插入/更新事件时触发
所以我有两个这样的桌子…
ext_words-------------
| id | word |
-------------
| 1  | this |
-------------
| 2  | that |
-------------
| 3  | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1  | this |   2   |
---------------------
| 2  | that |   1   |
---------------------
我正在尝试创建一个触发器,该触发器将:
- 更新ext_words_count.count时ext_words.word被更新。
为了进一步使事情复杂化,
- 如果ext_words.word在ext_words_countwhenext_words更新中不存在,我想将其插入ext_words_count并设置count为1。
我一直在寻找类似的问题:
1. 在使用自动增量字段插入触发器之前/之后,以及
2. 使用触发器来更新另一个数据库中的表以
尝试将2.合并在一起。这是我到目前为止的内容:
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 ;
任何建议和指示,我们将不胜感激。或者可能是我忽略的另一种方法,并且一如既往地先谢谢您!
我选择使用2个触发器,一个用于INSERT,一个用于UPDATE,因为我对MySQL中的条件语句不太熟悉。
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 ;
INSERT查询工作得很好,但是UPDATE查询没有更新word_count。我在更新查询中错过了什么吗?
回答:
在Grijesh的完美帮助和他使用条件语句的建议下,我能够获得 执行两项任务的触发器。再次感谢Grijesh
 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;
以上是 MySQL在插入/更新事件时触发 的全部内容, 来源链接: utcz.com/qa/415245.html







