我在使用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
语句。
但是,我正在使用似乎只调用我的DELETE
触发器的REPLACE
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
时,应同时调用DELETE
和INSERT
触发器。
我知道mySQL不支持多个触发器。
当另一个表发生INSERT
、DELETE
和REPLACE
事件时,获得相同结果(添加/减去视图)的可能解决方案是什么。
问题出在我自己的触发器上。
REPLACE
同时调用删除和插入,但此 IF 语句
IF (SELECT COUNT(*) FROM `table` WHERE userID = NEW.userID AND IP = new.IP) = 0 THEN
阻塞了插入。