mysql中的触发器收到错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中的触发器收到错误相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个更新某个值的触发器,如果​​该行不存在,则插入一个值为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

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

答案

请试试这个:

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 ;

以上是关于mysql中的触发器收到错误的主要内容,如果未能解决你的问题,请参考以下文章

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

从 NDBCLUSTER 收到错误 4239“具有给定名称的触发器已存在”

在 MySQL 中创建触发器以记录数据库中的更改

MySql触发器使用

MySQL触发器

纠正我在 mysql 触发器中的语法错误