当前位置: 首页 > news >正文

go数据操作-MySQL

1.快速入门

下载依赖

go get -u github.com/go-sql-driver/mysql

使用MySQL驱动

func Open(driverName, dataSourceName string) (*DB, error)

Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的信息。

import ("database/sql"_ "github.com/go-sql-driver/mysql"
)func main() {// DSN:Data Source Namedsn := "user:password@tcp(127.0.0.1:3306)/dbname"db, err := sql.Open("mysql", dsn)if err != nil {panic(err)}defer db.Close()  // 注意这行代码要写在上面err判断的下面
}

SetMaxOpenConns

func (db *DB) SetMaxOpenConns(n int)

SetMaxOpenConns设置与数据库建立连接的最大数目。 如果n大于0且小于最大闲置连接数,会将最大闲置连接数减小到匹配最大开启连接数的限制。 如果n<=0,不会限制最大开启连接数,默认为0(无限制)。

SetMaxIdleConns

func (db *DB) SetMaxIdleConns(n int)

SetMaxIdleConns设置连接池中的最大闲置连接数。 如果n大于最大开启连接数,则新的最大闲置连接数会减小到匹配最大开启连接数的限制。 如果n<=0,不会保留闲置连接。

2.CRUD操作

2.1. Insert操作

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)type Person struct {UserId   int    `db:"user_id"`Username string `db:"username"`Sex      string `db:"sex"`Email    string `db:"email"`
}type Place struct {Country string `db:"country"`City    string `db:"city"`TelCode int    `db:"telcode"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {r, err := Db.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")if err != nil {fmt.Println("exec failed, ", err)return}id, err := r.LastInsertId()if err != nil {fmt.Println("exec failed, ", err)return}fmt.Println("insert succ:", id)
}

2.2. Select操作

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)type Person struct {UserId   int    `db:"user_id"`Username string `db:"username"`Sex      string `db:"sex"`Email    string `db:"email"`
}type Place struct {Country string `db:"country"`City    string `db:"city"`TelCode int    `db:"telcode"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {var person []Personerr := Db.Select(&person, "select user_id, username, sex, email from person where user_id=?", 1)if err != nil {fmt.Println("exec failed, ", err)return}fmt.Println("select succ:", person)
}

2.3. Update操作

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)type Person struct {UserId   int    `db:"user_id"`Username string `db:"username"`Sex      string `db:"sex"`Email    string `db:"email"`
}type Place struct {Country string `db:"country"`City    string `db:"city"`TelCode int    `db:"telcode"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {res, err := Db.Exec("update person set username=? where user_id=?", "stu0003", 1)if err != nil {fmt.Println("exec failed, ", err)return}row, err := res.RowsAffected()if err != nil {fmt.Println("rows failed, ",err)}fmt.Println("update succ:",row)}

 2.4. Delete操作

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)type Person struct {UserId   int    `db:"user_id"`Username string `db:"username"`Sex      string `db:"sex"`Email    string `db:"email"`
}type Place struct {Country string `db:"country"`City    string `db:"city"`TelCode int    `db:"telcode"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {/*_, err := Db.Exec("delete from person where user_id=?", 1)if err != nil {fmt.Println("exec failed, ", err)return}*/res, err := Db.Exec("delete from person where user_id=?", 1)if err != nil {fmt.Println("exec failed, ", err)return}row,err := res.RowsAffected()if err != nil {fmt.Println("rows failed, ",err)}fmt.Println("delete succ: ",row)
}

3. MySQL事务

mysql事务特性:

    1) 原子性2) 一致性3) 隔离性4) 持久性

golang MySQL事务应用:

    1) import (“github.com/jmoiron/sqlx")2)  Db.Begin()        开始事务3)  Db.Commit()        提交事务4)  Db.Rollback()     回滚事务
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")type Person struct {UserId   int    `db:"user_id"`Username string `db:"username"`Sex      string `db:"sex"`Email    string `db:"email"`}type Place struct {Country string `db:"country"`City    string `db:"city"`TelCode int    `db:"telcode"`}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database}func main() {conn, err := Db.Begin()if err != nil {fmt.Println("begin failed :", err)return}r, err := conn.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")if err != nil {fmt.Println("exec failed, ", err)conn.Rollback()return}id, err := r.LastInsertId()if err != nil {fmt.Println("exec failed, ", err)conn.Rollback()return}fmt.Println("insert succ:", id)r, err = conn.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")if err != nil {fmt.Println("exec failed, ", err)conn.Rollback()return}id, err = r.LastInsertId()if err != nil {fmt.Println("exec failed, ", err)conn.Rollback()return}fmt.Println("insert succ:", id)conn.Commit()}
http://www.lryc.cn/news/292041.html

相关文章:

  • 基于node.js和Vue3的医院挂号就诊住院信息管理系统
  • Django如何调用机器学习模型进行预测
  • Web3.0初探
  • 在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql
  • WPOpenSocial实现WordPress的QQ登录
  • 关于我用AI编写了一个聊天机器人……(7)
  • WebService的services.xml问题
  • 永久删除 Elasticsearch 中的主节点
  • 从搜索引擎到答案引擎:LLM驱动的变革
  • IDEA如何进行远程Debug调试
  • 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)
  • C语言数据结构之二叉树
  • 《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)
  • 笔记本电脑Win11重装系统教程
  • 突破编程_C++_面试(基础知识(3))
  • AI的安全应答之道
  • 【昕宝爸爸小模块】日志系列之什么是分布式日志系统
  • 如何在淘宝和Shopee上进行选品:策略和原则
  • C++/数据结构:二叉搜索树的实现与应用
  • C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因
  • RabbitMQ之三种队列之间的区别及如何选型
  • 【ArcGIS微课1000例】0099:土地利用变化分析
  • 学习鸿蒙基础(2)
  • 2024年美国大学生数学建模竞赛思路与源代码【2024美赛C题】
  • Windows11搭建GPU版本PyTorch环境详细过程
  • Springboot项目基础配置:小白也能快速上手!
  • 20240127在ubuntu20.04.6下配置whisper
  • C# 递归执行顺序
  • go 实现暴力破解数独
  • go语言-字符串处理常用函数