什么可以使触发器失败,如果失败会发生什么



我创建了一个触发器(以前从未做过)
我的目标是:
当一行或多行插入表"userlite"时
如果在表"litedetails"中插入的新行中存在具有"IdLite"的行
然后为计数的每一行在表"informations"中添加一行。

新行数据字段为:

IdUser->来自插入表"userlite"的新行

IdLite->在插入表"userlite"的新行和从表"litedetails"中选择的行中都是一样的

IdEvent->来自所选行

我用下面的代码创建了触发

DELIMITER $$
CREATE TRIGGER after_newuserlite
AFTER INSERT ON userlite
FOR EACH ROW
BEGIN
IF (
    (
     SELECT COUNT(*) 
     FROM litedetails
     WHERE IdLite = NEW.IdLite
    ) > 0
   ) THEN
   INSERT INTO informations (IdUser, IdLite, IdEvent)
   SELECT NEW.IdUser AS IdUser, IdLite, IdEvent
   FROM litedetails
   WHERE IdLite = NEW.IdLite;
END IF;
END;
$$

我已经测试过了,一切似乎都有效,但我担心自己缺乏经验,所以我的问题是:
1) 有什么东西会导致我的扳机失灵吗
2) 如果触发器失败,会发生什么
3) 如果触发器失败,由谁启动触发器的查询将继续其效果?

根据注释:当使用支持事务的表时,触发器是语句的一部分。如果触发器失败,则会导致触发它的查询也失败,从而导致回滚。这适用于InnoDBTokuDB存储引擎。

对于不是事务引擎的MyISAM,触发器可能会出错,但不会导致回滚(因为该存储引擎不支持它)。

触发器可能会因为多种原因而失败,就像常规查询一样,但如果它们失败了,您将收到一条错误消息/通知,让您采取行动(通知用户失败、记录消息、重试等)。

最新更新