mysql中的触发器出现错误
Posted
技术标签:
【中文标题】mysql中的触发器出现错误【英文标题】:triggers in mysql getting an error 【发布时间】:2017-12-19 16:46:11 【问题描述】:我正在尝试创建一个将更新某些值的触发器,如果该行不存在,则插入一个 value = 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 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 6 行的 '' 附近使用
根据我找到的示例,一切看起来都不错,我缺少什么? 请帮助解决这个问题。 谢谢。
【问题讨论】:
请查看INSERT ... ON DUPLICATE KEY UPDATE Syntax。您正试图在 SQL 语句中注入任意过程代码。 也试过了,同样的错误。 可以分享statistics
的餐桌设计吗?
我将评论栏更改为 --> cmets(没有区别,只是听起来更好)。反正... item_id Index mediumint(9) like int(11) cmets int(11)
【参考方案1】:
请试试这个:
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中的触发器出现错误的主要内容,如果未能解决你的问题,请参考以下文章