介绍
这期内容当中小编将会给大家带来有关怎么在golang中实现mysql数据库事务的提交与回滚,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
golang适合做什么
golang可以做服务器端开发,但golang很适合做日志处理,数据打包,虚拟机处理,数据库代理等工作。在网络编程方面,它还广泛应用于网络应用,API应用等领域。
用到的库有:
“;github.com/jmoiron/sqlx" _ “;github.com/go-sql-driver/mysql"
事务(事务)
事务操作是通过三个方法实现:
开始():开启事务
Commit():提交事务(执行sql)
Rollback():回滚
举例:
在事物里操作MySQL任意一步操作出错,都需要回滚()回滚。
package main import ( ,“fmt" ,“;github.com/alecthomas/log4go" ,_ “;github.com/go-sql-driver/mysql" ,“;github.com/jmoiron/sqlx" ) , var Db * sqlx.DB func init (),, { 呃,db:=sqlx.Open (“mysql",“TigerwolfC: 123456 @tcp(127.0.0.1:3306)/测试? charset=utf8") ,if err  !=, nil { fmt.Println才能(“open  mysql 失败了,,,,呃) ,返回 ,} Db =, db } , func main (),, { ,mysqlTest () }, , {func mysqlTest(),错误 ,tx, err :=, Db.Begin () ,if err  !=, nil { log4go.Error才能(“open  mysql database fail",,呃) return 才能,犯错 ,} , ,因此,err :=, tx.Exec (“INSERT  INTO userinfo (用户名,密码,部门,电子邮件),VALUES (?, ?, ?, ?)“,“cici",“33333”,“这次;,“TigerwolfC@163.com") ,if err  !=, nil { fmt.Println才能(“insert 失败,错误:,,,,呃) tx.Rollback才能() return 才能,犯错 ,} ,id, _ :=, result.LastInsertId () ,fmt.Println (“insert  id is :“, id) _的不同之处是,err =, tx.Exec (“update  userinfo set department =, ?, where username =, ?“,“cekong",“hahah") ,if err  !=, nil { fmt.Println才能(“update  failed 错误:“,犯错) tx.Rollback才能() return 才能,犯错 ,}else { fmt.Println才能(“update 成功!“) ,} _的不同之处是,err =, tx.Exec(得到userinfo 获“delete where  username =, ?,,,,“weiwei") ,if err  !=, nil { fmt.Println才能(“delete 错误:“犯错) tx.Rollback才能() return 才能,犯错 ,其他}{ fmt.Println才能(“delete success") ,} ,return tx.Commit () }
当然也可以用推迟tx.Rollback(),在程序退出前回滚。
func mysqlTest(),错误{ ,tx, err :=, Db.Begin () ,if err  !=, nil { log4go.Error才能(“open  mysql database fail",,呃) ,} ,defer tx.Rollback () , ,因此,err :=, tx.Exec (“INSERT  INTO userinfo (用户名,密码,部门,电子邮件),VALUES (?, ?, ?, ?)“,“cici",“33333”,“这次;,“TigerwolfC@163.com") ,if err  !=, nil { fmt.Println才能(“insert 失败,错误:,,,,呃) return 才能,犯错 ,} ,id, _ :=, result.LastInsertId () ,fmt.Println (“insert  id is :“, id) _的不同之处是,err =, tx.Exec (“update  userinfo set department =, ?, where username =, ?“,“cekong",“hahah") ,if err  !=, nil { fmt.Println才能(“update  failed 错误:“,犯错) return 才能,犯错 ,}else { fmt.Println才能(“update 成功!“) ,} _的不同之处是,err =, tx.Exec(得到userinfo 获“delete where  username =, ?,,,,“weiwei") ,if err  !=, nil { fmt.Println才能(“delete 错误:“犯错) return 才能,犯错 ,其他}{ fmt.Println才能(“delete success") ,} ,return tx.Commit () }
<>强补充:数据库事务处理(去,mysql) 强>
看代码吧~
//数据库连接池 var db * sql.DB//初始化数据库 func initDB (), (err 错误){ fmt.Println(“学习数据库“) dsn :=,“usename: password@tcp (127.0.0.1:3306)/dataname" db, err =, sql.Open (“mysql" dsn) if 犯错!=nil { fmt.Println(“打开数据库失败,犯错:“,呃,“.dsn:“(dsn) 返回 } 时间=err db.Ping () if 犯错!=nil { fmt.Println (“open  failed 犯错:“,犯错) 返回 } fmt.Println(“连接数据库成功“) ,//最大连接数 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在golang中实现mysql数据库事务的提交与回滚