正如标题中所提到的,我创建了一个触发器,当一个新值插入到“candidate”表中时,它会捕获,并在“history”表中存储一些信息。不过,我也想存储插入是否成功,但似乎不能让它工作。我试过:
DELIMITER $$
CREATE TRIGGER cand_i BEFORE INSERT ON candidate FOR EACH ROW
BEGIN
DECLARE action varchar(10);
IF(EXISTS(select username from candidate where username=NEW.username)) THEN
SET action='Failed';
ELSE SET action='Success';
END IF;
INSERT INTO history (actiontype,actiondate,actionsuccess,actiontable,username)
VALUES ('Insert',now(),action,'Candidate',NEW.username);
END $$
DELIMITER ;
有什么建议吗?
1条答案
按热度按时间mzmfm0qo1#
如果您使用的是非事务表(例如myisam)作为
history
表中,您可以使用BEFORE
以及AFTER
原始答案中描述的触发器。如果两者都有candidate
以及history
如果INSERT
失败,整个事务-包括在BEFORE
触发器被回滚,因此此方法将不起作用。如果那样的话,你需要使用AFTER
触发器,并执行INSERT
到history
会议前的会议桌INSERT
到候选表,例如。原始答案
既然你想录下
INSERT
,无论它是否成功,都需要使用两个触发器来实现。在BEFORE
触发器,只需创建一个状态为failed的条目,并在AFTER
触发器,将状态更新为Success
. 自AFTER
触发器仅在行操作成功时运行(手动),这将执行您想要的操作。