【问题标题】:MySQL Trigger: UPDATE parent row AFTER DELETE in child rowMySQL触发器:在子行中删除后更新父行
【发布时间】:2017-06-05 16:06:14
【问题描述】:

当删除子行时,我需要更新父表的值。

父表:答案

  • id_answer
  • 回答
  • votes(包含总票数)

儿童桌:answers_votes

  • id_vote
  • id_answer
  • id_user
  • date_insert
  • ip

每删除一个子行,父表中votes的值必须减1。

这是我当前创建触发器的语句,但 UPDATE 行有问题,可能是 votes-1?任何帮助将不胜感激。谢谢!

CREATE TRIGGER update_votes BEFORE DELETE on answers_votes
FOR EACH ROW
BEGIN
UPDATE answers SET answers.votes = (answers.votes-1) WHERE answers.id_answer = OLD.id_answer;
END

有什么想法吗?谢谢!

【问题讨论】:

  • 你可以试试这个吗? DELIMITER $$ CREATE TRIGGER update_votes BEFORE DELETE ON answers_votes FOR EACH ROW BEGIN UPDATE answers SET answers.votes = (answers.votes -1 ) WHERE answers.id_answer = OLD.id_answer; END$$ DELIMITER ;
  • 另外,没有分隔符,它在update 行终止,所以我添加了$$ 作为分隔符。
  • @harshavmb 成功了!如果您发布您的解决方案,我可以选择它作为接受的答案。谢谢!
  • 很高兴它对您有所帮助.. :)

标签: mysql triggers


【解决方案1】:

所以,我怀疑; 是这里的问题。我已将$$ 添加为DELIMITER,以便mysql 客户端不会误解;

您修改后的触发器将是:

DELIMITER $$
CREATE TRIGGER update_votes
BEFORE DELETE ON answers_votes
FOR EACH ROW 
BEGIN 
  UPDATE answers SET answers.votes = (answers.votes -1 ) WHERE answers.id_answer = OLD.id_answer;
END$$ 
DELIMITER ;

注意,是DELIMITER ; 不是DELIMITER;

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多