怎么在golang中实现mysql数据库事务的提交与回滚

  介绍

这期内容当中小编将会给大家带来有关怎么在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数据库事务的提交与回滚