eg:
func transactionDemo(){
//1.开启事务
tx,err := db.Begin()
if err != nil{
fmt.Printf("begin failed,err:%v\n",err)
return
}
//2.执行多个sql操作
sqlStr1 := `update users set username=username-2 where userid = 20`
sqlStr2 := `update users set username=username+2 where userid = 21`
//执行SQL1
_,err = tx.Exec(sqlStr1)
fmt.Println(err)
if err != nil {
//要回滚
tx.Rollback()
fmt.Printf("执行SQL2出错,要回滚!\n")
return
}
//执行SQL2
_, err = tx.Exec(sqlStr2)
fmt.Println(err)
if err != nil {
//要回滚
tx.Rollback()
fmt.Printf("提交出错啦,要回滚!\n")
return
}
// 上面两步sql都执行成功,提交本次事务
err = tx.Commit()
if err != nil {
fmt.Println("提交错误,需要回滚!")
return
}
fmt.Printf("事务执行成功\n")
}