【问题标题】:MySQL nested Conditional in Update TriggerMySQL 在更新触发器中嵌套条件
【发布时间】:2012-10-06 05:00:04
【问题描述】:

我正在尝试找出更新 MySQL 表的条件触发器。 问题是即使输入的数据与已经存在的数据相同,更新触发器也会触发。因此,如果我有一个带有 row:value 的列,如果我用UPDATE votes SET plus_votes = 2; 更新,即使没有真正改变 UPDATE 触发器仍然会被触发。所以为了防止这一切,我想像这样在我的触发器中添加一个条件子句

BEGIN
IF NEW.vote_value <> OLD.vote_value THEN
UPDATE my_other_table
SET plus_votes =
    CASE NEW.vote_value WHEN '1'
        THEN plus_votes + 1
        ELSE plus_votes
    END,
    minus_votes =
    CASE NEW.vote_value WHEN '1'
        THEN minus_votes
        ELSE minus_votes +1
    END
WHERE my_other_table.id=NEW.votes_join_id;
END

结束

问题的后半部分是我在 IF 语句中有 CASE 条件。 有人可以帮助解决这个问题并展示如何在 TRIGGER 中执行嵌套条件吗?

非常感谢

【问题讨论】:

  • TRIGGER的语法完全错误
  • 你需要写一个简单的mysql查询而不是触发器
  • 我可能应该包含整个触发器语法,我的意思是作为伪代码。我非常感谢您的帮助,并将在以后的帖子中更正此问题或明确标记。

标签: mysql triggers conditional-statements


【解决方案1】:

虽然你发布的语法完全错误,但我已经弄清楚你想要什么试试这个(未测试)

DROP TRIGGER IF EXISTS upd_vote;

DELIMITER $$

  CREATE TRIGGER upd_vote AFTER UPDATE ON `my_other_table`
  FOR EACH ROW BEGIN
    IF NEW.vote_value <> OLD.vote_value THEN
      SET 
        NEW.plus_votes = IF(NEW.vote_value=1,OLD.plus_votes+1,OLD.plus_votes),
        NEW.minus_votes = IF(NEW.vote_value=1,OLD.minus_votes,OLD.minus_votes +1 )
    END IF;
END$$

DELIMITER ;

【讨论】:

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