插入/更新事件的MySQL触发器

插入/更新事件的MySQL触发器,mysql,triggers,insert,insert-update,Mysql,Triggers,Insert,Insert Update,所以我有两张这样的桌子… ext_words ------------- | id | word | ------------- | 1 | this | ------------- | 2 | that | ------------- | 3 | this | ------------- ext_words_count --------------------- | id | word | count | --------------------- | 1 | this | 2

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

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

ext_words_count
---------------------
| id | word | count |
---------------------
| 1  | this |   2   |
---------------------
| 2  | that |   1   |
---------------------
我正在尝试创建一个触发器,该触发器将:

  • 更新
    ext\u words\u count.count,当
    ext\u words.word
    更新时进行计数
使事情进一步复杂化,

  • 如果更新
    ext\u words
    ext\u words
    中不存在
    ext\u words.word
    ,我想将其插入
    ext\u words\u count
    并将
    count
    设置为1
我一直在研究类似的问题:
1.和
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 ;
非常感谢您的建议和指导。或者可能是我忽略的另一种方法,并且总是提前感谢

更新:
我选择使用两个触发器,一个用于插入,一个用于更新,因为我对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 ;


插入查询工作正常,但是更新查询没有更新
word\u count
。我在更新查询中遗漏了什么吗?

在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;   

避免使用像count这样的关键字,因为sql方法使用它 有时会出现创建错误,但有时运行良好

DELIMITER $$
 CREATE TRIGGER update_count
   AFTER UPDATE ON ext_words
     FOR EACH ROW
       BEGIN

          SELECT count INTO @x FROM ext_words_count LIMIT 1;
          UPDATE ext_words_count
          SET count = @x + 1
          WHERE word = NEW.word;

END;
$$
DELIMITER ;

你可能想看看这个,我的解决方案有效吗?我想提高的结果是什么。记住,不能更新在其中调用触发器的同一个表MySQL@GrijeshChauhan-谢谢你的链接!我无法得到你的答案,但这是因为我不熟悉MySQL中的条件语句,而不是因为你的解决方案。我的意思是,当更新ext_单词时,如果单词不在ext_单词中,那么我想插入它并使计数为1。否则,如果单词在ext\u words\u count中,请将计数增加1…明白了,当然我的查询不起作用,等等…我这里有一个快速问题。如果您以逗号分隔的形式将单词存储在其他一些表中,如“this,that”,我们是否可以在此表上写入一个触发器来拆分值并将其存储在ext_words和ext_words_count中?很好,那么哪种形式帮助您实现了DB.exchange?从未收到任何人的消息:(我刚刚浏览了一些文章。再次感谢您的帮助并将我指向另一个站点!这个触发器在我的MySQL服务器中非常有效,可以过滤掉多余的插入。
DELIMITER $$
 CREATE TRIGGER update_count
   AFTER UPDATE ON ext_words
     FOR EACH ROW
       BEGIN

          SELECT count INTO @x FROM ext_words_count LIMIT 1;
          UPDATE ext_words_count
          SET count = @x + 1
          WHERE word = NEW.word;

END;
$$
DELIMITER ;