日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

golang實現mysql數據庫事務的提交與回滾

瀏覽:304日期:2023-10-24 15:51:19

MySQL 事務主要用于處理操作量大,復雜度高的數據。在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。

事務用來管理 insert,update,delete 語句,事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要么全部執行,要么全部不執行。

一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

本文主要介紹golang實現MySQL數據庫事物的提交與回滾

用到的庫有:

'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() }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美aa国产视频| 在线视频亚洲| 日韩88av| 野花国产精品入口| 国产精品一区二区三区av | 欧美精品国产白浆久久久久| 不卡一二三区| 美女日韩在线中文字幕| 美女视频免费精品| 欧美日韩精品免费观看视欧美高清免费大片| 欧美日韩精品一区二区视频| 美女精品网站| 精品久久久中文字幕| 美女网站一区| 久久国产麻豆精品| 婷婷综合六月| 精品欧美日韩精品| 99精品视频在线| 免费一级欧美在线观看视频| 久久亚洲影院| 亚洲电影有码| 你懂的网址国产 欧美| 久久av一区| 亚洲精品在线影院| 国产日韩三级| 中文字幕亚洲精品乱码| 久久精品国产www456c0m| 欧美激情aⅴ一区二区三区| 亚洲精品免费观看| 亚洲免费成人| 午夜欧美巨大性欧美巨大| 国产精品nxnn| 亚洲tv在线| 国产视频一区免费看| 欧美日韩视频免费观看| 国产一区二区三区久久久久久久久| 日本成人中文字幕| 亚洲免费中文| 久久一区二区三区喷水| 六月婷婷一区| 国产亚洲一区| 噜噜噜躁狠狠躁狠狠精品视频 | 自拍日韩欧美| 日韩国产一区| 久久精品欧洲| 国产日韩中文在线中文字幕| 亚洲精品字幕| 鲁大师影院一区二区三区| 午夜欧美精品久久久久久久| 久久精品123| 欧美成a人片免费观看久久五月天| 日韩欧美中文字幕电影| 在线国产日韩| 三级一区在线视频先锋| 亚洲综合丁香| 六月婷婷一区| 日韩在线a电影| 首页国产欧美久久| 免费久久99精品国产| 亚洲精品1区2区| 99在线精品视频在线观看| 欧美精品一区二区久久| 久久精品青草| 国产超碰精品| 群体交乱之放荡娇妻一区二区| 国产精品成人a在线观看| 精品美女视频| av资源新版天堂在线| 91视频一区| 国产一区二区三区探花| 国产成人精品一区二区三区视频 | 四虎影视精品| 久久人人精品| 欧美 日韩 国产一区二区在线视频| 日韩中文视频| 久久亚洲精品中文字幕蜜潮电影| 91精品啪在线观看国产18| 国产精品婷婷| 精品美女在线视频| 国产毛片精品久久| 欧美一级网址| 日韩三级一区| 中文字幕成人| 免费精品视频最新在线| 女主播福利一区| 久久国产精品久久w女人spa| 亚洲精品小说| 视频一区二区欧美| 色狠狠一区二区三区| 青青伊人久久| 精品72久久久久中文字幕| 日韩欧美自拍| 欧美日韩尤物久久| 一区在线视频观看| 亚洲视频二区| 国产乱论精品| 国产资源在线观看入口av| 国产99亚洲| 久久国产精品久久久久久电车 | 精品一区二区三区中文字幕| 国产资源在线观看入口av| 亚洲国内精品| 蘑菇福利视频一区播放| 清纯唯美亚洲综合一区| 国模大尺度视频一区二区| 狠狠久久伊人| 99精品网站| 亚洲人亚洲人色久| 欧美日韩国产高清电影| 国产极品久久久久久久久波多结野| 国产精品一区二区三区av| 麻豆久久一区| 国产一区二区三区四区| 美女一区网站| 日韩av在线免费观看不卡| 欧美精品国产一区| 日韩精品水蜜桃| 日韩高清国产一区在线| 久久中文在线| 激情久久久久久| 视频一区视频二区在线观看| 久久狠狠亚洲综合| 另类中文字幕国产精品| 亚洲五月综合| 成人污污视频| 欧美日韩国产高清| 欧美亚洲一区二区三区| 日韩中文在线播放| 91精品日本| 少妇精品导航| 欧美日韩99| 欧美va天堂在线| 欧美一级久久| 久久理论电影| 久久精品99国产精品日本| 中文字幕在线视频网站| 日韩精品一二区| 成人亚洲精品| 免费精品视频最新在线| 91av亚洲| 日本久久一区| 免费不卡中文字幕在线| 国产精品一级在线观看| 99久久久久| 国产毛片久久久| 午夜欧美在线| 国产一区二区三区四区二区| 亚洲精品第一| 亚洲性图久久| 国产一区二区三区四区| 日本欧洲一区二区| 性欧美videohd高精| 国产日本精品| 久久福利精品| 亚洲天堂一区二区| 国产精品视频一区二区三区四蜜臂 | 麻豆成人综合网| 久久精品主播| 日韩高清不卡在线| 三级小说欧洲区亚洲区| 日韩欧美中文字幕电影| 日韩一区二区三区免费播放| 欧美日韩精品一本二本三本| 免费欧美一区| 国产精品亚洲产品| 亚洲日产国产精品| 狠狠爱成人网| 日韩欧美一区免费| 美女av一区| 91成人在线网站| 中文视频一区| 午夜久久福利| 亚洲精品在线影院| 精品一区二区三区在线观看视频| 日韩成人精品一区二区三区| 国产亚洲午夜| 激情婷婷欧美| 精品理论电影在线| 久久国产欧美日韩精品| 亚洲精品第一| 一区二区国产在线| 亚洲经典在线| 香蕉国产精品| 午夜久久免费观看| 久久亚洲成人| 久久三级视频| 91综合网人人| 久久影院资源站| 久久国产生活片100| 少妇精品久久久一区二区三区| 亚洲精品99| 成人av二区| 日韩天堂在线| 欧美~级网站不卡| 精品视频97| 国产日韩欧美一区二区三区| 久久电影一区| 最新日韩欧美| 久久精品国产99久久| 天堂va在线高清一区|