使用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 相关文章推荐
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
对Golang中的FORM相关字段理解
May 02 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
Golang 编译成DLL文件的操作
May 06 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
go xorm框架的使用
May 22 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
Go 中的空白标识符下划线
Mar 25 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang gRPC HTTP协议转换示例
Jun 16 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
如何把PHP转成EXE文件
2006/10/09 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
Vue computed 计算属性代码实例
2020/04/22 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
老生常谈python中的重载
2018/11/11 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
HTML5标签小集
2011/08/02 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
临床护士自荐信
2014/01/31 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
超市开店计划书
2014/09/15 职场文书
教师自我剖析材料
2014/09/29 职场文书
2016教师节感恩话语
2015/12/09 职场文书