MySQL的触发器在插入/更新事件(MySQL trigger On Insert/Update e

2019-08-22 08:56发布

所以,我有两个表是这样的...

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.countext_words.word被更新。

为了进一步使问题复杂化,

  • 如果ext_words.word不存在ext_words_countext_words更新,我想将它插入到ext_words_count并设置count为1。

我一直在寻找类似的问题:
1. 前/使用自动递增字段INSERT触发器后 ,和
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 ;

任何建议和方向不胜感激。 或者可能是另一种方法,我忽略了,并提前一如既往的感谢!

更新:
我已经选择了,因为我不是那么熟悉MySQL的条件语句中使用2个触发器,一个用于INSERT和一个进行更新。

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 ;

插入查询是伟大的工作,但是更新查询没有更新word_count 。 有什么我更新查询错过..?

Answer 1:

随着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;   


Answer 2:

避免使用像数的关键字作为由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 trigger On Insert/Update events