前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Go语言连接MySQL:从入门到精通的实战指南

使用Go语言连接MySQL:从入门到精通的实战指南

原创
作者头像
小明爱吃火锅
发布于 2024-07-07 10:00:39
发布于 2024-07-07 10:00:39
2.1K0
举报
文章被收录于专栏:小明说Java小明说Java

上一篇介绍了了,如何使用PHP连接数据,本文将介绍使用Go语言连接MySQL。Go 语言,作为一种现代化的编程语言,因其并发性能优异、工程化出色而受到越来越多开发者的青睐。本文将从入门到精通的角度,详细介绍如何使用 Go 语言连接 MySQL 数据库,并通过实战案例加深理解。

一、准备工作

1.1 安装 MySQL

首先,确保你的系统中安装了 MySQL 数据库。可以从官网下载安装包进行安装,或者使用包管理器进行安装。

1.2 安装 Go MySQL 驱动

在 Go 中,最常用的 MySQL 驱动是 go-sql-driver/mysql。在终端运行以下命令进行安装:

代码语言:bash
AI代码解释
复制
go get -u github.com/go-sql-driver/mysql

1.3 配置数据库连接信息

在开始编码之前,需要在 MySQL 中创建一个新的数据库和用户,并授予相应的权限。同时,记录下数据库的主机名、端口号、用户名和密码,这些信息将在后续的代码中用于建立连接。

二、基础操作:连接与查询

2.1 建立连接

在 Go 中,使用 database/sql 包来管理数据库连接。以下是一个简单的示例,展示如何建立连接:

代码语言:go
AI代码解释
复制
package main

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

func main() {
    // 连接数据库
    db, err := sql.Open("mysql", "username:password@tcp(hostname:port)/dbname")
    if err != nil {
        fmt.Println("Error connecting to the database:", err)
        return
    }
    defer db.Close()

    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        fmt.Println("Error pinging the database:", err)
        return
    }

    fmt.Println("Successfully connected to MySQL!")
}

2.2 执行查询

一旦连接建立,就可以执行 SQL 查询了。以下是一个查询数据库中表的示例:

代码语言:go
AI代码解释
复制
// 执行查询
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
    fmt.Println("Error executing query:", err)
    return
}
defer rows.Close()

// 遍历结果
for rows.Next() {
    var id int
    var name string
    err = rows.Scan(&id, &name)
    if err != nil {
        fmt.Println("Error scanning row:", err)
        continue
    }
    fmt.Printf("ID: %d, Name: %s\n", id, name)
}

// 检查遍历过程中是否发生错误
if err = rows.Err(); err != nil {
    fmt.Println("Error iterating through rows:", err)
}

三、进阶技巧:事务处理与预编译语句

3.1 事务处理

在处理涉及多个数据库操作的业务逻辑时,事务是保证数据一致性的关键。以下是一个简单的事务处理示例:

代码语言:go
AI代码解释
复制
tx, err := db.Begin()
if err != nil {
    fmt.Println("Error starting transaction:", err)
    return
}

_, err = tx.Exec("INSERT INTO users (name) VALUES (?)", "Alice")
if err != nil {
    tx.Rollback()
    fmt.Println("Error executing insert:", err)
    return
}

_, err = tx.Exec("INSERT INTO orders (user_id, product) VALUES (?, ?)", 1, "Product A")
if err != nil {
    tx.Rollback()
    fmt.Println("Error executing insert:", err)
    return
}

tx.Commit()
fmt.Println("Transaction completed successfully!")

3.2 预编译语句

预编译语句可以提高查询效率,防止 SQL 注入攻击。以下是一个使用预编译语句的示例:

代码语言:go
AI代码解释
复制
stmt, err := db.Prepare("SELECT id, name FROM users WHERE id = ?")
if err != nil {
    fmt.Println("Error preparing statement:", err)
    return
}
defer stmt.Close()

var id int
var name string
err = stmt.QueryRow(1).Scan(&id, &name)
if err != nil {
    fmt.Println("Error executing prepared statement:", err)
    return
}
fmt.Printf("ID: %d, Name: %s\n", id, name)

四、连接池的使用

5.1 连接池的重要性

在高并发的场景下,建立和关闭数据库连接的开销是非常大的。使用连接池可以复用数据库连接,提高性能。

5.2 Go 中的连接池

Go 的 database/sql 包已经内置了连接池功能。通过设置 db.SetMaxOpenConnsdb.SetMaxIdleConns 可以控制最大打开连接数和最大空闲连接数。

六、总

通过本文的学习,读者应该已经掌握了使用 Go 语言连接 MySQL 数据库的基础知识和进阶技巧。在实际开发中,还需要不断地学习和实践,以适应不断变化的业务需求和技术环境。随着技术的发展,MySQL 和 Go 语言都将不断进步,为开发者提供更加高效、稳定和安全的数据存储和处理服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
18 . Go之操作Mysql和sqlx使用
bindvars的一个常见误解是,它们用来在sql语句中插入值。它们其实仅用于参数化,不允许更改SQL语句的结构。例如,使用bindvars尝试参数化列或表名将不起作用:
iginkgo18
2022/05/09
1.8K0
Go-MySQL-Driver,让Go语言拥抱MySQL
闫同学
2023/10/14
6000
golang学习之旅:使用go语言操作mysql数据库
1.下载并导入数据库驱动包 官方不提供实现,先下载第三方的实现,点击这里查看各种各样的实现版本。 这里选择了Go-MySQL-Driver这个实现。地址是:https://github.com/go-sql-driver/mysql/。 然后按照里面的说明下载驱动包: $ go get github.com/go-sql-driver/mysql 最后导入包即可: import "database/sql" import _ "github.com/go-sql-driver/mysql" 2.连接至数据库
李海彬
2018/03/27
1.8K0
golang学习之旅:使用go语言操作mysql数据库
GoLang如何操作mysql
Go原生提供了连接数据库操作的支持,在用 Golang进行开发的时候,如果需要在和数据库交互,则可以使用database/sql包。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。
大忽悠爱学习
2022/08/23
9030
GoLang如何操作mysql
2.Go语言项目操作MySQL数据库实践
快速了解 MySQL 数据库 MySQL 是目前主流关系型的数据库,它的胞胎兄弟 MariaDB (MySQL 的一个分支),除此之外使用最多的就是 Oracle 和 PostgreSQL 数据库。
全栈工程师修炼指南
2022/09/29
6.8K0
2.Go语言项目操作MySQL数据库实践
Golang如何优雅连接MYSQL数据库?
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可使用database/sql包。
JavaEdge
2021/02/23
13K0
Golang如何优雅连接MYSQL数据库?
Go语言操作Mysql语言基础知识
本次使用的是go mod进行包依赖管理,还不会使用的向上爬梯子,找go mod用法。
Go进阶者
2021/02/07
8160
Go 操作 MySQL 数据库
在实际开发中,要用到数据库存储数据。MySQL是一个关系型数据库管理系统 使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。
张云飞Vir
2020/04/01
1.2K0
Go语言入门(十) Mysql与Redis操作
Mysql与Redis操作 Mysql开发 安装mysql,创建test库 创建表 mysql> CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT '', `age` int(11) DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; mysql> in
alexhuiwang
2020/09/24
9880
Go语言中使用sqlx来操作事务
在应用程序中,数据库事务的使用至关重要。它可以确保操作的原子性、一致性、隔离性和持久性(ACID)。github.com/jmoiron/sqlx 包提供了一个便利的方法来简化对数据库的操作。
南山竹
2024/08/15
1340
Go语言中使用sqlx来操作事务
Golang学习笔记之Golang与Mysql交互
Go标准库中没有数据库驱动。参见http://golang.org/s/sqldrivers获取第三方驱动。 这里选择了Go-MySQL-Driver这个实现。地址是:https://github.com/go-sql-driver/mysql/。 安装:go get github.com/go-sql-driver/mysql 官方database/sql包文档:https://studygolang.com/pkgdoc 有关于MySQL基本操作可以去看我的另一篇简书:https://www.jianshu.com/p/2e01f4c6b626 使用的数据库定义如下
李海彬
2018/12/28
2.5K1
Golang学习笔记之Golang与Mysql交互
golang源码分析(34)mysql驱动
为什么需要使用空白导入?是因为需要执行mysql包的初始化代码(代码位于%GOPATH%/github.com/go-sql-driver/mysql/driver.go)
golangLeetcode
2022/08/02
1K0
go-sql-driver源码分析
https://github.com/go-sql-driver 实现了基本的sql操作
golangLeetcode
2022/08/02
1.6K0
go-sql-driver源码分析
Go语言增强版操作Mysql(Sqlx)
NameExec方法是通过结构体或Map绑定SQL语句,试了试,感觉用处不大,不做举例。
Go进阶者
2021/02/07
2.5K1
Go语言 orm库之gorm
GORM是一个比较流行且功能齐全的orm库,主要有以下特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Context,预编译模式,DryRun 模式 批量插入,FindInBatches,Find/Create with Ma
孤烟
2020/12/07
1.2K0
go语言实现mysql的数据库对接
在Go语言中,我们可以使用第三方的库来实现与MySQL数据库的对接。本文将介绍如何使用go-sql-driver/mysql库在Go语言中对接MySQL数据库。
大盘鸡拌面
2024/02/04
3320
GO web 开发 实战三,数据库预处理
了解什么是预处理,我们可以来对比一下,普通的 sql 语句执行过程和 预处理的执行过程
阿兵云原生
2023/02/16
3890
如何使用mysql数据库【Golang 入门系列十】
之前,已经讲过一些Golang的基础的东西,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html,
章为忠学架构
2019/08/09
1.1K0
Go基础之--操作Mysql(一)
关于标准库database/sql database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现。 database/sql库提供了一些type。这些类型对掌握它的用法非常重要。 DB 数据库对象。 sql.DB类型代表了数据库。和其他语言不一样,它并是数据库连接。golang中的连接来自内部实现的连接池,连接的建立是惰性的,当你需要连接的时候,连接池会自动帮你创建。通常你不需要操作连接池。一切都有go来帮你
coders
2018/03/30
2.3K0
GO-操作数据库
Go 语言中的 database/sql 包定义了对数据库的一系列操作。database/sql/driver包定义了应被数据库驱动实现的接口,这些接口会被 sql 包使用。但是 Go 语言没有提供任何官方的数据库驱动,所以我们需要导入第三方的数据库驱动。不过我们连接数据库之后对数据库操作的大部分代码都使用 sql 包。
cwl_java
2020/04/08
1.6K0
相关推荐
18 . Go之操作Mysql和sqlx使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档