mysql中的触发器收到错误

问题描述 投票:1回答:1

我正在尝试创建一个更新某个值的触发器,如果​​该行不存在,则插入一个值为1的新行。

我用3种可能的方式编写了触发器,所有这些都是错误的

版本1:

CREATE TRIGGER stat_trg BEFORE INSERT ON comments
  FOR EACH ROW
  BEGIN
    INSERT INTO statistics 
      SET item_id = NEW.item_id,
          likes = 0,
          comment = 1
    ON DUPLICATE KEY UPDATE  
      SET comment = OLD.comment + 1;
  END; 

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第9行的“SET comment = OLD.comment + 1”附近使用正确的语法

版本2:

CREATE TRIGGER stat_trg AFTER INSERT ON comments
FOR EACH ROW
BEGIN
    DECLARE num integer DEFAULT 0;
    SELECT comment into num FROM statistics
      WHERE item_id = OLD.item_id;
    SET num := num + 1; 

    INSERT INTO statistics (item_id, comment, likes) VALUES (num,1,0)
END;

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第4行的''附近使用正确的语法

版本3:

CREATE TRIGGER stat_trg BEFORE INSERT ON comments
  FOR EACH ROW
  BEGIN
    INSERT INTO statistics (item_id, likes, COMMENT) VALUES (NEW.item_id,0,1)
    ON DUPLICATE KEY UPDATE  
      comment = comment + 1;
  END; 

1064 - You have an error in your SQL syntax; check the manual that corresponds > to your MySQL server version for the right syntax to use near '' at line 6

根据我发现的例子,我看起来都很好,我错过了什么?请帮忙解决这个问题。谢谢。

mysql sql triggers
1个回答
0
投票

请试试这个:

DELIMITER $$
CREATE TRIGGER `stat_trg` BEFORE INSERT ON `comments`
  FOR EACH ROW BEGIN
    INSERT INTO `statistics` set item_id= NEW.item_id, likes = '0', comments = '1' ON DUPLICATE KEY UPDATE 
      comments = values(comments) + 1;
  END$$
  DELIMITER ;
© www.soinside.com 2019 - 2024. All rights reserved.