当前位置: 首页 > 工具软件 > sqlx-model > 使用案例 >

go-zero 操作数据库事务示例 sqlx

周翼
2023-12-01

测试软件版本:go-zero v1.1.1 , golang 1.15.3

感谢网友的指点网址:

https://www.yuque.com/tal-tech/go-zero/phyvoz#AP82Z

自己看的不细,还要细心些。

package main

import (
	"fmt"

	"github.com/tal-tech/go-zero/core/stores/sqlx"
)

// 事务测试
func main() {
	conn := sqlx.NewMysql("name:password@tcp(linux.com:3306)/dbName?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai")

	insertstr1 := "INSERT INTO ***;"
	//insertstr2 := "INSERT INTO ***;"
	insertstr2err := "INSERT INTO ***;"

	err := conn.Transact(func(session sqlx.Session) error {

		res, err := session.Exec(insertstr1)
		if err != nil {
			return err
		}
		lastID, _ := res.LastInsertId()
		fmt.Printf("res 1: %d", lastID)

		// 此处操作如果没有报错,则,1,2,二处操作数据库都插入数据成功。
		// 此处操作如果报错,则,1,2 二处操作数据库都不会插入数据。1 插入后回滚了。
		//res2, err := session.Exec(insertstr2)
		res2, err := session.Exec(insertstr2err) // 出错的 SQL
		if err != nil {
			return err
		}
		lastID2, _ := res2.LastInsertId()
		fmt.Printf("res 2: %d", lastID2)

		return nil
	})
	if err != nil {
		fmt.Printf("Transact fail:%v", err)
	}


}

SQL 语句因为有敏感信息,所以还是要大家自己写。

我就没有创建测试表。

1,报错就会回滚

2,不报错就全部提交。

 

 类似资料: