我不想触发回滚

I don´t want trigger to rollback

Sooo,我在 MySQL 中写了一个触发器来计算插入查询的尝试次数(甚至失败的尝试),但到目前为止什么都没有。

如果插入成功,变量'attempts'加1。但是当插入查询失败时(因为你试图插入一些不合逻辑的东西)触发器会回滚并且 'attempts' 不会增加。

如何避免回滚?或者如何战胜它,使 'attempts' 增加?

这是我的代码:

CREATE TABLE myData (myValues INT);
SET attempts =0;

DELIMITER |
CREATE TRIGGER countingAttempts BEFORE INSERT ON myData FOR EACH ROW 
    SET @attempts = @attempts+1;
DELIMITER ;

INSERT INTO myData VALUES(10); /* It works, attempts becomes 1*/
INSERT INTO myData VALUES (X); /* The insert query fails because 'myValues' is INT and X is not an INT, attempts should become 2, but the trigger rollsback and attemps doesn´t change*/ 

您似乎在尝试计算由于数据错误而导致错误的尝试插入次数(可能启用了 STRICT_TRANS_TABLES 模式)。

没有“回滚”,因为实际上没有插入。触发器根本不会在检测到错误时执行。 (尽管如果您要插入多行,触发器将在错误行之前针对初始正确行执行,因此在这种情况下您会看到变量增加。)

您可以尝试禁用 STRICT_TRANS_TABLES 并改为在触发器中进行一些验证,但这也会对所有其他表和更新语句产生影响,因此我不推荐这样做。

我看到的另一个选择是不从客户端执行插入,而是调用存储过程来执行插入;这使您有机会在存储过程中递增计数器,无论插入是否有效。