例如,我正在尝试在mysql数据库中创建新记录。在sql.ErrTxDone的情况下,这实际上是什么意思,万一事务被提交了,我该怎么办?

最佳答案

如果事务处于无法再使用的状态,则会出现此错误。
sql.Tx :

调用Commit或Rollback后,对事务的所有操作均因ErrTxDone失败。

还有 sql.ErrTxDone :

对已落实或回滚的事务执行的任何操作都将返回ErrTxDone。

var ErrTxDone = errors.New("sql: transaction has already been committed or rolled back")

你该怎么办?不再使用交易。如果您还有其他任务,请在该任务之外或在另一个事务中执行。
如果您有应该在同一事务中执行的任务,则在您必须做所有事情之前不要提交它。如果事务已回滚(例如由于先前的错误),则您别无选择,只能重试(使用其他事务)或报告失败。
如果您已经在使用事务,请尝试将需要全部或全部发生的所有内容放入事务中。这就是交易的重点。要么应用其中的所有内容,要么都不应用任何内容。正确使用它们,您不必考虑对它们进行清理。它们要么成功,您就很高兴,要么不成功,您就重试或报告错误,但是您不必进行任何清理。

关于mysql - 如何处理sql.ErrTxDone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57002228/

10-11 22:13