我有一个实现邮件队列的MySQL表,我也用它来发送报告系统中意外错误的邮件。有时这些未触发的错误会在事务中发生,所以当我回滚转换时,我也会撤消邮件队列表中插入的行(报告意外错误的邮件)。
我的问题是如何强制在事务中间的表中插入行而忽略可能的事务回滚?我的意思是,如果事务最终回滚,则不回滚报告错误详细信息的电子邮件的行插入。
这个表可以通过多个异步进程读取以在队列中发送邮件,因此在这种情况下,必须阻止行才能发送一次电子邮件,因此无法使用MyISAM表类型并使用Innodb
提前致谢。
答案 0 :(得分:2)
如果INSERT
应该在ROLLBACK
交易中存活,可以肯定地说,它不是交易的一部分。所以你应该做的就是简单地将它移到交易之外。有很多方法可以实现这一目标:
INSERT
,而是存储
会话变量中的字段(这些字段将在ROLLBACK
之后存活),之后
事务从会话变量INSERT
,它不会受到第一个连接上的事务的影响。答案 1 :(得分:0)
您可以创建与数据库的不同连接以插入错误,但它不会在同一个事务上下文中,因此会插入它们。