数据库事务处理(go,mysql)

//数据库连接池
var db *sql.DB
//初始化数据库
func initDB() (err error){
	fmt.Println("学习数据库")
	dsn := "usename:password@tcp(127.0.0.1:3306)/dataname"
	db, err = sql.Open("mysql",dsn)
	if err!=nil {
		fmt.Println("打开数据库失败 err:",err,".dsn:",dsn)
		return
	}
	err = db.Ping()
	if err!=nil {
		fmt.Println("open failed err:",err)
		return
	}
	fmt.Println("连接数据库成功")

	//最大连接数
	db.SetMaxOpenConns(10)
	//设置连接池中的最大闲置连接数
	db.SetMaxIdleConns(10)
	return
}

func trans()  {
	tx, err := db.Begin()
	if err!=nil {
		fmt.Println("事务开启失败, err:",err)
		return
	}
	sqlStr1 := "update student set age=age-2 where id=1;"
	sqlStr2 := "update student set age=age+2 where id=3;"
	_, err = tx.Exec(sqlStr1)
	if err!=nil {
		fmt.Println("修改失败, err",err,",sqlStr1:",sqlStr1)
		tx.Rollback()
		return
	}

	_, err = tx.Exec(sqlStr2)
	if err!=nil {
		fmt.Println("修改失败, err",err,",sqlStr2:",sqlStr2)
		tx.Rollback()
		return
	}

	fmt.Println("执行成功")
	//提交事务
	tx.Commit()
}
func main() {
	fmt.Println("mysql 002.事务处理")
	initDB()
	trans()


}

猜你喜欢

转载自blog.csdn.net/Batac_Lee/article/details/109449277