golang标准库学习使用Tx事物时遇到的坑

2020-12-21  本文已影响0人  韩小禹

学习使用Tx事物时遇到的坑

func tx(){
    tx ,err := DB.Begin()
    deleteSql := "delete from demo where id = ?"
    stmt, err := DB.Prepare(deleteSql)
    if err != nil{
        log.Fatalf("prepare err ; %v", err)
    }
    if err != nil{
        log.Fatalf("tx err: %v", err)
    }
    res, err := tx.Stmt(stmt).Exec(17)
    if err != nil{
        log.Fatalf("tx.stmt.exec err: %v", err)
    }
    RowsAffected, _ := res.RowsAffected()
    if RowsAffected == 0 {
        tx.Rollback()
        // 如果没有return,则下面的插入操作会比较怪异
        return
    }

    insertSql := "insert into demo2 (name, time) values(?,?)"
    stmt, err = DB.Prepare(insertSql)
    if err != nil{
        log.Fatalf("prepare err: %v", err)
    }
    res,err = tx.Stmt(stmt).Exec("ethan",time.Now().Format("2006-01-02 15:04:05"))
    if err != nil{
        log.Fatalf("exec err: %v",err)
    }
    lastIndexId,_:= res.LastInsertId()
    if lastIndexId == 0{
        tx.Rollback()
        return
    }
    tx.Commit()
}
上一篇 下一篇

猜你喜欢

热点阅读