这篇文章主要给大家介绍了关于在Golang中如何对MySQL进行操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Golang具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在Github上找到很多开源的驱动。

其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。

使用这个驱动, 在项目里import进:

import (
 "database/sql"
 _ "github.com/go-sql-driver/mysql"
)

在正式使用database/sql包之前,首先得明白sql.DB并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道DSN的合法性,需使用sql.DB实例(比如db)db.Ping() 方法, 如下:

err = db.Ping()
if err != nil {
 // 错误处理
}

使用sql.Open()方法即可获得一个sql.DB实例。需要注意的是,sql.DB的设计就是用来作为长连接使用的,不应该在项目里频繁的进行Open()与Close(),提倡的做法是声明一个全局的sql.DB实例, 将其复用起来。即只Open()一次,使用直到程序结束任务。

拿到sql.DB实例之后,就可以对数据库进行操作了。

在操作数据库时,推荐做法是使用db.Prepare()对SQL语句进行预编译,这样具有较高的安全性,可在一定程度上避免诸如SQL注入这样的攻击手段。

一些示例:

/*
 查询操作
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `id` = ?")
defer stmt.Close()
if err != nil {
 //错误处理
}
var userName string
//Scan() 将结果复制到userName
err = stmt.QueryRow(1).Scan(&userName)

fmt.Println(userName)

/*
 多行结果
*/
stmt, err := db.Prepare("SELECT `user_name` FROM `users` WHERE `age` = ?")
defer stmt.Close()
if err != nil {
 //错误处理
}

rows, err := stmt.Query(年龄)
if err != nil {
 //错误处理
}

for rows.Next() {
 var userName string
 if err := rows.Scan(&userName); err != nil {
  //错误处理
 }
}
/*
 插入操作
*/
stmt, err := db.Prepare("INSERT INTO `users` (`user_name`, `age`) VALUES(?, ?)")
defer stmt.Close()
if err != nil {
 //错误处理
}
stmt.Exec("名字",年龄)
/*
 事务
*/
tx, err := db.Begin()
if err != nil {
 //错误处理
}
defer tx.Rollback()

stmt, err := db.Prepare("")
defer stmt.Close()
if err != nil {
 //错误处理
}

stmt.Exec()
err = tx.Commit()
if err != nil {
 //错误处理
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对爱安网的支持。

最新资讯
腾讯云的发家史:试错中成长

腾讯云的发家史:试错中

腾讯在B端业务的思路可以概括为将分散的业务集中起来,
微软公布第四财季财报:营收337亿美元 净利增长49%

微软公布第四财季财报

微软第四财季营收为337.17亿美元,比去年同期的300.85亿
媒体会挤满滴滴高管 顺风车依旧无上线时间表

媒体会挤满滴滴高管

但即使做了这么多有关安全的调整,包括柳青在内的滴滴高
小鹏汽车连发补救措施挽人心

小鹏汽车连发补救措施

小鹏汽车正在制定新的补偿方案,包括三年6折保值换购或
亚马逊败走 图书电商巨头四进三

亚马逊败走 图书电商

用户增长的红利正逐渐消失。为了能够稳定自身的业务规
滴滴取消顺风车附近接单

滴滴取消顺风车附近接

未来将在白天试运行顺风车,并在试运行期间免收车主信息
最新文章
在go中使用omitempty的代码实例

在go中使用omitempty

今天小编就为大家分享一篇关于在go中使用omitempty的
go for range遍历二维数组的示例

go for range遍历二维

今天小编就为大家分享一篇关于go for range遍历二维数
Golang中重复错误处理的优化方法

Golang中重复错误处理

这篇文章主要给大家介绍了关于Golang中重复错误处理优
使用go gin来操作cookie的讲解

使用go gin来操作cook

今天小编就为大家分享一篇关于使用go gin来操作cookie
使用go来操作redis的方法示例

使用go来操作redis的

今天小编就为大家分享一篇关于使用go来操作redis的方
golang读取文件的常用方法总结

golang读取文件的常用

今天小编就为大家分享一篇关于golang读取文件的常用方