亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在golang中實現mysql數據庫事務的提交與回滾

發布時間:2021-04-27 15:50:47 來源:億速云 閱讀:675 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在golang中實現mysql數據庫事務的提交與回滾,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

golang適合做什么

golang可以做服務器端開發,但golang很適合做日志處理、數據打包、虛擬機處理、數據庫代理等工作。在網絡編程方面,它還廣泛應用于web應用、API應用等領域。

用到的庫有:

"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"

事務(Transactions)

事務操作是通過三個方法實現:

Begin():開啟事務

Commit():提交事務(執行sql)

Rollback():回滾

舉例:

在事物里操作MySQL任意一步操作出錯,都需要Rollback()回滾。

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,err:=sqlx.Open("mysql","TigerwolfC:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
 if err != nil {
  fmt.Println("open mysql failed,", err)
  return
 }
 Db = db
}
 
func main()  {
 mysqlTest()
} 
 
func mysqlTest() error{
 tx, err := Db.Begin()
 if err != nil {
  log4go.Error("open mysql database fail", err)
  return err
 }
 
 result, err := tx.Exec("INSERT INTO userinfo (username, password,department,email) VALUES (?, ?,?,?)","cici","33333","it","TigerwolfC@163.com")
 if err != nil{
  fmt.Println("insert failed,error: ", err)
  tx.Rollback()
  return err
 }
 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 error:",err)
  tx.Rollback()
  return err
 } else {
  fmt.Println("update success!")
 }
 _, err = tx.Exec("delete from userinfo where username = ? ", "weiwei")
 if err != nil{
  fmt.Println("delete error:",err)
  tx.Rollback()
  return err
 }else{
  fmt.Println("delete success")
 }
 return tx.Commit()
}

當然也可以用defer tx.Rollback(),在程序退出前回滾。

func mysqlTest() error{
 tx, err := Db.Begin()
 if err != nil {
  log4go.Error("open mysql database fail", err)
 }
 defer tx.Rollback()
 
 result, err := tx.Exec("INSERT INTO userinfo (username, password,department,email) VALUES (?, ?,?,?)","cici","33333","it","TigerwolfC@163.com")
 if err != nil{
  fmt.Println("insert failed,error: ", err)
  return err
 }
 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 error:",err)
  return err
 } else {
  fmt.Println("update success!")
 }
 _, err = tx.Exec("delete from userinfo where username = ? ", "weiwei")
 if err != nil{
  fmt.Println("delete error:",err)
  return err
 }else{
  fmt.Println("delete success")
 }
 return tx.Commit()
}

補充:數據庫事務處理(go,mysql)

看代碼吧~

//數據庫連接池
var db *sql.DB
//初始化數據庫
func initDB() (err error){
	fmt.Println("學習數據庫")
	dsn := "usename:password@tcp(127.0.0.1:3306)/dataname"
	db, err = sql.Open("mysql",dsn)
	if err!=nil {
		fmt.Println("打開數據庫失敗 err:",err,".dsn:",dsn)
		return
	}
	err = db.Ping()
	if err!=nil {
		fmt.Println("open failed err:",err)
		return
	}
	fmt.Println("連接數據庫成功")
 
	//最大連接數
	db.SetMaxOpenConns(10)
	//設置連接池中的最大閑置連接數
	db.SetMaxIdleConns(10)
	return
}
 
func trans()  {
	tx, err := db.Begin()
	if err!=nil {
		fmt.Println("事務開啟失敗, err:",err)
		return
	}
	sqlStr1 := "update student set age=age-2 where id=1;"
	sqlStr2 := "update student set age=age+2 where id=3;"
	_, err = tx.Exec(sqlStr1)
	if err!=nil {
		fmt.Println("修改失敗, err",err,",sqlStr1:",sqlStr1)
		tx.Rollback()
		return
	}
 
	_, err = tx.Exec(sqlStr2)
	if err!=nil {
		fmt.Println("修改失敗, err",err,",sqlStr2:",sqlStr2)
		tx.Rollback()
		return
	}
 
	fmt.Println("執行成功")
	//提交事務
	tx.Commit()
}
func main() {
	fmt.Println("mysql 002.事務處理")
	initDB()
	trans() 
}

上述就是小編為大家分享的怎么在golang中實現mysql數據庫事務的提交與回滾了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

界首市| 木兰县| 枣阳市| 达日县| 莱阳市| 巴林左旗| 涡阳县| 丰台区| 中山市| 鹿邑县| 河曲县| 沙坪坝区| 蒙城县| 金川县| 大丰市| 体育| 兴山县| 元阳县| 徐汇区| 古蔺县| 阳泉市| 咸丰县| 凉山| 保德县| 新巴尔虎右旗| 云阳县| 都江堰市| 察隅县| 岳池县| 锡林浩特市| 夏河县| 宁河县| 通山县| 富裕县| 白水县| 许昌县| 宁晋县| 莲花县| 阿鲁科尔沁旗| 浙江省| 左贡县|