Go 语言操作 MySQL 之 事务操作

栏目: IT技术 · 发布时间: 4年前

内容简介:友情提示:此篇文章大约需要阅读 5分钟 9秒,不足之处请多指教,感谢你的阅读。数据库事务( transaction )是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 事务由事务开始与事务结束之间执行的全部数据库操作组成。MySQL 存储引擎分类有 MyISAM、InnoDB、Memory、Merge等,但是其中最为常用的就是 MyISAM 和 InnoDB 两个引擎,这两个引擎中,支持事务的引擎就是 Innodb(MySQL 默认引擎),在创

友情提示:此篇文章大约需要阅读 5分钟 9秒,不足之处请多指教,感谢你的阅读。 订阅本站

事务

数据库事务( transaction )是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 事务由事务开始与事务结束之间执行的全部数据库操作组成。

MySQL 存储引擎分类有 MyISAM、InnoDB、Memory、Merge等,但是其中最为常用的就是 MyISAM 和 InnoDB 两个引擎,这两个引擎中,支持事务的引擎就是 Innodb(MySQL 默认引擎),在创建数据库中要注意对应引擎。

这里可以看一下针对 MySQL 选择引擎的文章:

怎么优雅的选择 MySQL 存储引擎 - Debug客栈

事务 ACID

通常事务必须满足4个条件( ACID ):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

Go 语言操作 MySQL 之 事务操作

Go 操作 MySQL 使用事务

Go语言中使用以下三个方法实现MySQL中的事务操作:

// 开始事务
func (db *DB) Begin() (*Tx, error)
// 回滚事务
func (tx *Tx) Rollback() error
// 提交事务
func (tx *Tx) Commit() error

示例代码:

// 事务更新操作
func transActionUpdate() {
    tx, err := db.Begin()
    if err != nil {
        if tx != nil {
            _ = tx.Rollback()
        }
        fmt.Printf("begin trans action failed, err:%v\n", err)
        return
    }
    sqlStr1 := "UPDATE user SET age = ? WHERE id = ?"
    result1, err := tx.Exec(sqlStr1, 20, 1)
    if err != nil {
        _ = tx.Rollback()
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    n1, err := result1.RowsAffected()
    if err != nil {
        _ = tx.Rollback()
        fmt.Printf("exec result1.RowsAffected() failed, err:%v\n", err)
        return
    }
    sqlStr2 := "UPDATE user SET age = ? WHERE id = ?"
    result2, err := tx.Exec(sqlStr2, 20, 6)
    if err != nil {
        _ = tx.Rollback()
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    n2, err := result2.RowsAffected()
    if err != nil {
        _ = tx.Rollback()
        fmt.Printf("exec result1.RowsAffected() failed, err:%v\n", err)
        return
    }

    if n1 == 1 && n2 == 1 {
        _ = tx.Commit()
        fmt.Printf("transaction commit success\n")
    } else {
        _ = tx.Rollback()
        fmt.Printf("transaction commit error, rollback\n")
        return
    }
}

参考(学习)文章: Go语言操作MySQL – 李文周的个人博客

欢迎关注我们的微信公众号,每天学习 Go 知识

Go 语言操作 MySQL 之 事务操作

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析

算法设计与分析

王红梅 / 清华大学 / 2006-7 / 23.00元

《算法设计与分析》(普通高校本科计算机专业特色教材精选)将计算机经典问题和算法设计技术很好地结合起来,系统地介绍了算法设计技术及其在经典问题中的应用。全书共12章,第1章介绍了算法的基本概念和算法分析方法,第2章从算法的观点介绍了NP完全理论,第3章~~第11章分别介绍了蛮力法、分治法、减治法、动态规划法、贪心法、回溯法、分支限界法、概率算法和近似算法等算法设计技术,第12章基于图灵机计算模型介绍......一起来看看 《算法设计与分析》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具