为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8
【操作系统】:centos 7.8
【CPU】: 4 核
【问题描述】*:
1、代码
tx, err := db.Begin()
if err != nil {
if tx != nil {
e := tx.Rollback()
return e
}
fmt.Printf(“begin trans action failed, err:%v\n”, err)
return err
}
sqlStr1 := “UPDATE T_DEMO SET NAME = :name WHERE ID = :id;”
result1, err := tx.Exec(sqlStr1, “这是一家珠宝店”, 3)
if err != nil {
_ = tx.Rollback()
fmt.Printf(“exec failed, err:%v\n”, err)
return err
}
n1, err := result1.RowsAffected()
if err != nil {
_ = tx.Rollback()
fmt.Printf(“exec result1.RowsAffected() failed, err:%v\n”, err)
return err
}
result2, err := tx.Exec(sqlStr1, “这是一家连锁珠宝店”, 10)
if err != nil {
_ = tx.Rollback()
fmt.Printf(“exec failed, err:%v\n”, err)
return err
}
n2, err := result2.RowsAffected()
if err != nil {
_ = tx.Rollback()
fmt.Printf(“exec result1.RowsAffected() failed, err:%v\n”, err)
return err
}
if n1 == 1 && n2 == 1 {
_ = tx.Commit()
fmt.Printf(“transaction commit success\n”)
} else {
_ = tx.Rollback()
fmt.Printf(“transaction commit error, rollback\n”)
return err
}
return nil
====================
因为我一开始只有6条数据,执行了这段代码,发现id=10的这次更新是失败的,按理来说应该统一进行回滚,实际上在数据库中,不仅没回滚,还多了一条数据,这条数据是id值最大的那条数据
这个是执行后的结果