Home
Linux
Golang
MySQL
PHP
Other
golang事务完全案例
创建日期:2019-09-02 15:48:35
更新日期:2023-12-01 14:59:19
栏目:
Golang
浏览:873
## 直接代码说话 ``` // db package db import ( "log" // "github.com/go-sql-driver/mysql" ) func UploadCases(data []map[string]string) error { db, err := connect() if err != nil { return err } defer db.Close() for i := 0; i < len(data); i++ { //因为我的案例是一次更新大量数据,所以用到了循环 Tx, err := db.Begin() //开启事务,如果开启失败直接return if err != nil { return err } stm, err := Tx.Prepare(`处理第一条记录`) //我这里是插入数据 if err != nil { err = Tx.Rollback() //如果失败,直接提交回滚 if err != nil { return err } return err } res, err := stm.Exec(需要插入的数据) if err != nil { err = Tx.Rollback() //如果失败,直接提交回滚 if err != nil { return err } return err } did, err := res.LastInsertId() //得到插入那条数据的自增ID if err != nil { return err } stm, err = Tx.Prepare(`处理第二条记录`) if err != nil { err = Tx.Rollback() if err != nil { return err } return err } res, err = stm.Exec(需要插入的数据) if err != nil { err = Tx.Rollback() if err != nil { return err } return err } cid, err := res.LastInsertId() if err != nil { return err } stm, err = Tx.Prepare(`处理第三条数据`) if err != nil { err = Tx.Rollback() if err != nil { return err } return err } res, err = stm.Exec(did, cid) if err != nil { err = Tx.Rollback() if err != nil { return err } return err } err = Tx.Commit() //如果全部成功,那么提交事务 if err != nil { err = Tx.Rollback() //提交事务失败,回滚事务 if err != nil { return err } return err } } return nil } ```
内容版权声明:本文为舒孝元原创文章,转载无需和我联系,但请注明来自
舒孝元博客:https://www.shuxiaoyuan.com/info/8
联系邮箱:sxy@shuxiaoyuan.com