替换Trigger激活的DELETE触发器,但不是INSERT - mySQL

时间:2012-11-24 03:49:02

标签: mysql triggers

我在使用mySQL触发器时​​遇到了一些问题。

我有这个工作:

CREATE TRIGGER `insert_trigger` AFTER INSERT ON `table`
FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM `table` WHERE userID = NEW.userID AND IP = new.IP) = 0 THEN
    IF (SELECT COUNT(*) FROM `table` WHERE userID = NEW.userID) = 0 THEN
        INSERT INTO `table2` VALUES(NEW.userID, (SELECT (COUNT(*)+1) FROM `table` WHERE userID = NEW.userID) ); 
    ELSE 
        UPDATE `table2` SET views = views+1 WHERE table.userID = NEW.userID;
    END IF;
END IF;
END//
DELIMITER ;

使用INSERT语句可以正常工作。

但是,我正在使用REPLACE,它似乎只调用我的DELETE触发器

CREATE TRIGGER `delete_trigger` BEFORE DELETE ON `table`
FOR EACH ROW
BEGIN
    IF (SELECT views FROM `table2` WHERE userID = OLD.userID) > 1 THEN
        UPDATE `table2` SET views = views-1 WHEREuserID = OLD.userID;
    END IF;
END//
DELIMITER ;

使用REPLACE时,应调用DELETEINSERT个触发器。

我知道mySQL不支持多个触发器。

当另一个表格发生INSERTDELETEREPLACE事件时,获得相同结果(添加/减去视图)的可能解决方案是什么。

谢谢!

1 个答案:

答案 0 :(得分:2)

问题在于我自己的触发器。

REPLACE同时调用Delete和Insert,但这个IF语句

IF (SELECT COUNT(*) FROM `table` WHERE userID = NEW.userID AND IP = new.IP) = 0 THEN

阻止插入。

感谢。