使用GO语言实现Mysql数据库CURD的简单示例


Posted in Golang onAugust 07, 2021

?、介绍驱动包和增强版Mysql操作库Sqlx

  • go-mysql-driver是go语言标准库(SDK)database/sql的”加工产品“,质量有保障!
  • go-mysql-driver运行时间虽然比较长,但是内存使用较少。
  • go-mysql-driver实现了database/sql,即便不是mysql,是使用其他数据库,也能够使用该包。
  • go-mysql-driver接口设计得比较好,上手较快。
  • 对于Sqlx,它其实也是go语言标准库(SDK)database/sql的”加工产品“。
  • Sqlx也可以用于其他数据库。
  • Sqlx包其实最大最大的优点是在查询方面,也就是使用select时优化得比较好。比原来的使用查询方便了不止一点。

一、先导入驱动包和增强版Mysql操作库Sqlx

package main
​
import (
    "fmt"
    //并不需要使用其API,只需要执行该包的init方法(加载MySQL是驱动程序)
    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)

此处需要导入导入mysql驱动包和增强版Mysql操作库Sqlx。
如果不清楚如何导入第三方包,请查看我的技术博客:手把手教你怎么使用Go语言第三方库。

二、insert操作

//执行insert操作
func main()  {
    //连接数据库
    //driverName:mysql,表示驱动器的名称是mysql也就上面"github.com/go-sql-driver/mysql"导入的驱动器。
    //dataSourceName:root:123456@tcp(localhost:3306)/mydb 账户名:密码@tcp(ip:端口)/数据库名称
    //sqlx.Open返回一个*sqlx.DB和错误。
    db, _ := sqlx.Open("mysql", "root:123456@tcp(localhost:3306)/mydb")
    defer db.Close()
    //执行增删改
    //query里面是sql语句。
    result, e := db.Exec("insert into person(name,age,rmb,gender,brithday) values(?,?,?,?,?);", "小扬", 21, 8888, true, 20000101)
    if e!=nil{
        fmt.Println("err=",e)
        return
    }
    // RowsAffected returns the number of rows affected by an
    // update, insert, or delete. Not every database or database
    // driver may support this.
    rowsAffected, _ := result.RowsAffected()
    // LastInsertId returns the integer generated by the database
    // in response to a command. Typically this will be from an
    // "auto increment" column when inserting a new row. Not all
    // databases support this feature, and the syntax of such
    // statements varies.
    lastInsertId, _ := result.LastInsertId()
    fmt.Println("受影响的行数=",rowsAffected)
    fmt.Println("最后一行的ID=",lastInsertId)
}

使用sqlx包的Open连接数据库。

driverName:mysql,表示驱动器的名称是mysql也就上面"github.com/go-sql-driver/mysql"导入的驱动器。
dataSourceName是root:123456@tcp(localhost:3306)/mydb 它的含义是 账户名:密码@tcp(ip:端口)/数据库名称。
sqlx.Open返回一个*sqlx.DB和错误。
然后执行db.Exec()操作。

result, e := db.Exec("insert into person(name,age,rmb,gender,brithday) values(?,?,?,?,?);", "小扬", 21, 8888, true, 20000101)

第一个参数是query语句。

rowsAffected, _ := result.RowsAffected()
lastInsertId, _ := result.LastInsertId()

RowsAffected()求受影响的行数。RowsAffected返回update, insert, or delete影响的行数。不是每一个数据库和数据库驱动可能支持这个。
LastInsertId()求插入的最后一行的ID。
LastInsertId返回数据库生成的最后一个ID。通常,这来自插入新行时的“自动递增”列。不是所有数据库都支持此功能。

使用GO语言实现Mysql数据库CURD的简单示例

三、delete操作

result, e := db.Exec("delete from person where name not like ?;", "%扬")

还是执行db.Exec(),第一个参数是delete语句

查看该操作是否执行成功。

使用GO语言实现Mysql数据库CURD的简单示例

成功!!!试一试吧!

四、update操作

result, e := db.Exec("update person set name = ? where id = ?;", "大扬", 1)

使用GO语言实现Mysql数据库CURD的简单示例

成功执行!

来看一看结果吧!

使用GO语言实现Mysql数据库CURD的简单示例

现在可以看到数据更新成功。将id为1的数据的name项更新为”大扬“。
这里两个?,后面就要有两个参数。

五、select操作

package main
​
import (
    "fmt"
    //并不需要使用其API,只需要执行该包的init方法(加载MySQL是驱动程序)
    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)
​
type Person struct {
    // 对应name表字段
    Name string `db:"name"`
    // 对应age表字段
    Age int `db:"age"`
    // 对应rmb表字段
    Money float64 `db:"rmb"`
}
​
func main()  {
    db, _ := sqlx.Open("mysql", "root:123456@tcp(localhost:3306)/mydb")
    defer db.Close()
​
    //预定义Person切片用于接收查询结果
    var ps []Person
    //执行查询,得到Perosn对象的集合,丢入预定义的ps地址
    e := db.Select(&ps, "select name,age,rmb from person where name like ?;", "%扬")
    if e != nil{
        fmt.Println("err=",e)
    }
    fmt.Println("查询成功",ps)
}

Person结构体里面的属性对应数据库里面的字段。比如:

Age int `db:"age"`

表示Age对应表里面的字段age。

type Person struct {
 // 对应name表字段
 Name string `db:"name"`
 // 对应age表字段
 Age int `db:"age"`
 // 对应rmb表字段
 Money float64 `db:"rmb"`
}
var ps []Person

因为查询的结果可能为多条,所以使用Person切片。然后将查询结果放入ps中
提示:要使用ps的指针!

e := db.Select(&ps, "select name,age,rmb from person where name like ?;", "%扬")

下面我们来看看查询结果:

使用GO语言实现Mysql数据库CURD的简单示例

到此这篇关于使用GO语言实现Mysql数据库CURD的简单示例的文章就介绍到这了,更多相关GO语言Mysql数据库CURD内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
Go语言操作数据库及其常规操作的示例代码
Apr 21 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
Golang之sync.Pool使用详解
May 06 Golang
使用golang编写一个并发工作队列
May 08 Golang
Golang中异常处理机制详解
Jun 08 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
go select编译期的优化处理逻辑使用场景分析
Jun 28 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
GO中sync包自由控制并发示例详解
Aug 05 Golang
go使用Gin框架利用阿里云实现短信验证码功能
Aug 04 #Golang
手把手教你导入Go语言第三方库
Aug 04 #Golang
Go语言实现Base64、Base58编码与解码
Jul 26 #Golang
golang内置函数len的小技巧
Jul 25 #Golang
修改并编译golang源码的操作步骤
Go语言应该什么情况使用指针
Jul 25 #Golang
基于Go语言构建RESTful API服务
Jul 25 #Golang
You might like
php中计算程序运行时间的类代码
2012/11/03 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
优秀员工自荐书
2013/12/19 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
咖啡店创业计划书
2014/08/15 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
老公保证书怎么写
2015/02/26 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技