我试图找出更新MySQL表的条件触发器。
问题是即使输入的数据与已存在的数据相同,更新触发器也会触发。所以,如果我有一个带有行的列:值设置为plus_votes:2如果我用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
END
问题的后半部分是我在IF语句中有CASE条件。 有人可以帮助这个issiu并展示如何在TRIGGER中进行嵌套条件化吗?
非常感谢
答案 0 :(得分:0)
虽然你发布的语法是完全错误的,但我已经想出你想要的东西试试这个(未经过测试)
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 ;