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

时间:2016-04-16 08:57:25

标签: mysql database-trigger

我创造了一个触发器(以前从未做过) 我的目标是:
当一行或多行被插入表格中时,用户点就会出现 如果有“IdLite'如在表格中插入的新行' litedetails'
然后在表格中添加一行'信息'计算每一行。

新行数据字段为:

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)如果触发器失败,启动触发器的查询将保留其效果吗?

1 个答案:

答案 0 :(得分:2)

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

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

触发器可能由于许多原因而失败,就像常规查询一样,但如果它们失败 - 您将收到一条错误消息/通知,让您对其进行操作(通知用户有关失败,请记录消息,再试一次)等)。