package main
import (
"errors"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"time"
)
var db *sqlx.DB
func initDB()(err error) {
dsn := "root:root@tcp(127.0.0.1:13306)/go_test?charset=utf8mb4&parseTime=True"
// 也可以使用MustConnect连接
db,err = sqlx.Connect("mysql",dsn)
if err != nil {
fmt.Printf("mysql connect failed, err: %v\n",err)
return
}
fmt.Println("connect mysql success!!")
db.SetConnMaxLifetime(time.Second * 10)
db.SetMaxOpenConns(500) // 设置与数据库建立连接的最大数目
db.SetMaxIdleConns(50) // 设置连接池中的最大闲置连接数
return
}
func transactionDemo2()(err error) {
tx,err := db.Beginx() // 开启事务
if err != nil {
fmt.Printf("begin trans failed,err: %v\n",err)
return err
}
defer func() {
if p := recover(); p != nil {
tx.Rollback()
panic(p)
} else if err != nil {
fmt.Println("rollback")
tx.Rollback()
} else {
err = tx.Commit()
fmt.Println("commit success")
}
}()
sqlStr1 := "UPDATE user SET age=20 WHERE id=?"
res,err := tx.Exec(sqlStr1,1)
if err != nil {
return err
}
n, err := res.RowsAffected()
if n != 1 {
return errors.New("exec sqlStr1 failed")
}
sqlStr2 := "UPDATE user SET age=50 WHERE i=?"
res,err = tx.Exec(sqlStr2,5)
if err != nil {
return err
}
n,err = res.RowsAffected()
if err != nil {
return err
}
if n != 1 {
return errors.New("exec sqlStr2 failed")
}
return err
}
func main() {
initDB()
transactionDemo2()
}
21.go之sqlx事务操作
最新推荐文章于 2024-06-21 15:11:13 发布