2012-11-24 44 views
0

我在使用mySQL触发器时​​遇到了一些问题。替换触发器激活的DELETE触发器,但不是INSERT - 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 ; 

当使用REPLACEDELETEINSERT触发器应该叫。

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

当另一个表有INSERT,DELETEREPLACE事件发生时,获得相同结果(加/减视图)的可能解决方案是什么?

谢谢!

回答

2

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

REPLACE电话都删除和插入,但这个IF语句

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

挡住插入。

谢谢。

+0

It's Smart answer,+1 –