测试软件版本: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,不报错就全部提交。