这篇文章主要给大家介绍了关于在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 {
 //错误处理
}

总结

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

最新资讯
路透社:波音目标是在7月中旬实现737Max复飞

路透社:波音目标是在7

两位知情人士告诉路透社,波音公司告诉737Max机型的部分
TCL集团第一季度营收296亿元 同比增长15.5%

TCL集团第一季度营收2

一季度,TCL集团共实现营业收入296亿元,同比增长15.5%;其
分众的有限边界和江南春的无限游戏

分众的有限边界和江南

对江南春来说,践行良知不是纸面上的自我批判,而是回归到
半月谈:防止孩子游戏成瘾 家长应管好自己身&份&证和脸

半月谈:防止孩子游戏

“16+”把登录游戏的基础准入年龄从13周岁升至16周岁,
连咖啡完成2.06亿元融资 已重新回归盈利状态

连咖啡完成2.06亿元融

36氪近日独家获悉,新零售咖啡品牌连咖啡已完成2.06亿元
Netflix再发行20亿美元债券 7个月内第二次

Netflix再发行20亿美

Netflix周二宣布,该公司计划发行约20亿美元债券,为其内
最新文章
Golang数组的传递详解

Golang数组的传递详解

今天小编就为大家分享一篇关于Golang数组的传递详解,小
golang高并发的深入理解

golang高并发的深入理

golang从语言级别上对并发提供了支持,而且在启动并发
golang 并发安全Map以及分段锁的实现方法

golang 并发安全Map以

这篇文章主要介绍了golang 并发安全Map以及分段锁的实
go实现文件的创建、删除与读取示例代码

go实现文件的创建、删

这篇文章主要给大家介绍了关于go如何实现文件的创建、
Go并发调用的超时处理的方法

Go并发调用的超时处理

这篇文章主要介绍了Go并发调用的超时处理的方法,小编觉
GOLANG使用Context实现传值、超时和取消的方法

GOLANG使用Context实

这篇文章主要介绍了GOLANG使用Context实现传值、超时