Mysql 加法触发器的右合成
代码: 当我想在phpmyadmin中添加触发器时,我得到错误:Mysql 加法触发器的右合成,mysql,sql,phpmyadmin,triggers,Mysql,Sql,Phpmyadmin,Triggers,代码: 当我想在phpmyadmin中添加触发器时,我得到错误: # Triggers for table Likes->News CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes` FOR EACH ROW BEGIN UPDATE `News` SET `CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = N
# Triggers for table Likes->News
CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes`
FOR EACH ROW
BEGIN
UPDATE `News` SET
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `IsFavorite` = 'yes');
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 '*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn`
AND `Type` = 'down'),
`CountFav' at line 8
如果我使用id
代替*
我会得到错误:
# Triggers for table Likes->News
CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes`
FOR EACH ROW
BEGIN
UPDATE `News` SET
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `IsFavorite` = 'yes');
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 '*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn`
AND `Type` = 'down'),
`CountFav' at line 8
请告诉我如何正确添加触发器?听起来难以置信,在mysql中,计数和(*)之间不能有空格: 在您的例子中,它位于第二个子查询中。将其更改为:
select count(*) -- OK
select count (*) -- syntax error!
这同样适用于
cast(…)
,这是一个语法错误:cast(col为unsigned)
(注意cast
和(
)之间的空格。我可以告诉你,我花了大约一个小时寻找那颗小宝石
编辑 另一个错误可能是由于未更改分隔符,如果过程中有分号,则需要更改分隔符:
...
`CountDownLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
...
试试看:
DELIMITER //
CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes`
FOR EACH ROW
BEGIN
UPDATE `News` SET
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `IsFavorite` = 'yes');
END;//
DELIMITER ;
哦,对不起,我看不到,我认为
*
或'
中的错误。非常感谢和抱歉。现在我得到第二个错误(#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第9行附近使用的正确语法。请参阅代码