标签:事务 return err nil fmt Printf GO 操作 tx
代码:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) //GO链接MySql var Db *sql.DB //连接池对象 func initDB() (err error) { dsn := "username:password@tcp(127.0.0.1:3306)/database?charset=utf8" db, err := sql.Open("mysql", dsn) if err != nil { return err } err = db.Ping() if err != nil { return err } //设置数据库连接池最大连接数 db.SetMaxOpenConns(10) //设置最大链接空闲数 db.SetMaxIdleConns(5) Db = db return nil } type User struct { Id int Name string Age int } //查询 func query(where string) { sqlStr := "select Id,Name,Age from User " + where + ";" //执行 rows, err := Db.Query(sqlStr) if err != nil { fmt.Printf("查询错误:%v\n", err) return } //释放连接 defer rows.Close() for rows.Next() { var u User //赋值并关闭链接(Scan方法) err := rows.Scan(&u.Id, &u.Name, &u.Age) if err != nil { fmt.Println("查询循环错误") continue } fmt.Printf("Id:%v;Name:%v;Age:%v;\n", u.Id, u.Name, u.Age) } } func transactionDemo() { //开启十五 tx, err := Db.Begin() if err != nil { if tx != nil { //回滚 tx.Rollback() } fmt.Printf("开启事务失败,错误:%v\n", err) return } sqlStr1 := "Update User Set age = 100 where Id=?" _, err = tx.Exec(sqlStr1, 3) if err != nil { tx.Rollback() fmt.Printf("执行sqlStr1失败,错误:%v\n", err) return } sqlStr2 := "Update User Set age = 150 where Id=?" _, err = tx.Exec(sqlStr2, 4) if err != nil { tx.Rollback() fmt.Printf("执行sqlStr2失败,错误:%v\n", err) return } //提交事务 err = tx.Commit() if err != nil { tx.Rollback() fmt.Printf("提交失败,错误:%v\n", err) return } fmt.Println("事务执行成功") } func main() { err := initDB() if err != nil { fmt.Printf("初始化失败,错误%v\n", err) return } fmt.Println("数据库链接成功。") fmt.Println("-----------------------------------") query("where id > 0") transactionDemo() fmt.Println("-----------------------------------") query("where id > 0") }
结果:
参考:https://www.bilibili.com/video/BV1fz4y1m7Pm?p=137
标签:事务,return,err,nil,fmt,Printf,GO,操作,tx 来源: https://www.cnblogs.com/dzw159/p/14963468.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。