例如,我正在尝试在mysql数据库中创建新记录。对于sql.ErrTxDone,这实际上是什么意思,万一事务被提交了,我该怎么办?
答案 0 :(得分:0)
如果事务处于无法使用的状态,则会出现此错误。
在调用Commit或Rollback之后,对该事务的所有操作都会因ErrTxDone失败。
对已提交或已回滚的事务执行的任何操作都将返回ErrTxDone。
var ErrTxDone = errors.New("sql: transaction has already been committed or rolled back")
您应该怎么做?不再使用交易。如果您还有其他任务,请在该任务之外或在另一笔交易中完成。
如果您有应该在同一事务中执行的任务,则在您必须做所有事情之前不要提交它。如果交易被回滚(例如由于先前的错误),您别无选择,只能重试(使用另一笔交易)或报告失败。
如果您已经在使用事务,请尝试将需要全部或全部发生的所有内容放入事务中。这就是交易的重点。要么应用其中的所有内容,要么都不应用任何内容。正确使用它们,您不必考虑对它们进行清理。他们要么成功,您就感到幸福,要么他们不成功,您就重试或报告错误,但是您不必进行任何清理。