mysql - 如何处理 sql.ErrTxDone

标签 mysql go

例如,我正在尝试在我的 mysql 数据库中创建一条新记录。在 sql.ErrTxDone 的情况下,它的实际含义是什么,如果事务已提交,我应该怎么做?

最佳答案

如果交易处于无法再使用的状态,您会收到此错误。

sql.Tx:

After a call to Commit or Rollback, all operations on the transaction fail with ErrTxDone.

还有sql.ErrTxDone :

ErrTxDone is returned by any operation that is performed on a transaction that has already been committed or rolled back.

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

你应该怎么做?不要再使用交易了。如果您有进一步的任务,请在它之外或在另一个事务中执行。

如果您有应该在同一个事务中的任务,请在完成所有必须做的事情之前不要提交它。如果事务被回滚(例如,由于先前的错误),您别无选择,只能重试(使用另一个事务)或报告失败。

如果您已经在使用事务,请尝试将需要发生的所有事情都放在事务中。这就是交易的重点。要么应用其中的所有内容,要么都不应用。正确使用它们,您不必考虑清理它们。他们要么成功,你很高兴,要么他们不成功,你重试或报告错误,但你不必做任何清理。

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

相关文章:

html - 如何保留HTTP主体的gzip表示形式

mysql - 检查整数列值

java - 使用 MySQL 更改预计值

mysql - 从数组中设置 mysql 语句中的列和值

php - PDO 查询 fetchAll 删除键但保留包括重复项的值

google-app-engine - Google App engine-Redislabs Go运行时生产报错-无效内存地址或nil指针解引用

datetime - 确定到期日期是否距离当前日期 12 天

mysql - 如何格式化要以 EST 或 PST 显示的日期时间

go - 为什么你不能在 Go "init"中命名一个函数?

arrays - 无法访问在另一个函数中更改的结构字段