MySQL触发器插入/更新事件

Dre*_*ess 27 mysql triggers insert insert-update

所以我有两张这样的桌子......

ext_words
-------------
| id | word |
-------------
| 1  | this |
-------------
| 2  | that |
-------------
| 3  | this |
-------------

ext_words_count
---------------------
| id | word | count |
---------------------
| 1  | this |   2   |
---------------------
| 2  | that |   1   |
---------------------
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个触发器,它将:

  • 更新ext_words_count.countext_words.word更新.

使事情进一步复杂化,

  • 如果ext_words.word在更新ext_words_count时不存在ext_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 ;
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议和方向.或者可能是我忽略的另一种方法,并且一如既往地提前感谢!

更新:
我选择使用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 ;
Run Code Online (Sandbox Code Playgroud)

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 ;
Run Code Online (Sandbox Code Playgroud)

INSERT查询工作正常,但UPDATE查询未更新word_count.在更新查询中是否有我遗漏的东西..?

Dre*_*ess 38

有了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;   
Run Code Online (Sandbox Code Playgroud)

  • 从未听过任何人的消息 :(我只是浏览了一些文章.再次感谢您的所有帮助,并指向我的其他网站! (2认同)
  • 此触发器在我的MySQL服务器中非常有效,可以过滤掉冗余插入. (2认同)