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