go-zero 操作數據庫事務示例 sqlx

測試軟件版本: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,不報錯就全部提交。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章