本文介绍了使用 golang 的 database/sql 标准库实现 mysql 数据库的 crud 操作。1. 首先需要安装 mysql 驱动并建立连接,使用 sql.open() 创建连接并用 ping() 测试连通性;2. 查询数据时通过 query() 执行 select 语句,并使用 rows.next() 和 scan() 遍历结果集;3. 插入数据使用 exec() 方法配合占位符防止 sql 注入,并通过 result 获取插入 id 和影响行数;4. 更新和删除操作同样使用 exec(),通过 rowsaffected() 获取受影响行数以确保操作准确;5. 最后提醒了错误处理、结构体封装、连接池配置及日志开启等开发注意事项。

在学习 Golang 的过程中,操作 MySQL 是一个非常常见的需求。对于初学者来说,database/sql 标准库已经足够完成大多数基础的数据库操作任务。本文就来聊聊如何用 database/sql 实现基本的 CRUD(增删改查)操作。

安装驱动并连接数据库
Go 本身不包含特定数据库的实现,需要引入对应的驱动。MySQL 常见的驱动是 github.com/go-sql-driver/mysql。

安装命令:
立即学习“go语言免费学习笔记(深入)”;
go get -u github.com/go-sql-driver/mysql
然后使用 sql.Open() 来建立连接:

import ( "database/sql" _ "github.com/go-sql-driver/mysql")func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err) } defer db.Close()}
sql.Open() 第一个参数是驱动名,第二个是 DSN(数据源名称)连接池默认是懒加载的,调用 Ping() 可以立即测试是否连得上:
err = db.Ping()if err != nil { panic(err)}
查询数据(Read)
查询是最常用的操作之一。使用 Query() 方法执行 SELECT 语句:
rows, err := db.Query("SELECT id, name FROM users")if err != nil { panic(err)}defer rows.Close()var id intvar name stringfor rows.Next() { err := rows.Scan(&id, &name) if err != nil { panic(err) } fmt.Println(id, name)}
使用 rows.Next() 遍历每一行用 Scan() 把字段值赋给变量别忘了关闭 rows,避免资源泄露
注意:如果只需要一行结果,可以使用 QueryRow(),它会自动处理单行数据。
插入数据(Create)
插入数据使用 Exec() 方法,它返回一个 Result 接口,可以获取影响的行数和最后插入 ID:
result, err := db.Exec("INSERT INTO users (name) VALUES (?)", "Tom")if err != nil { panic(err)}lastID, _ := result.LastInsertId()rowCnt, _ := result.RowsAffected()fmt.Printf("Last inserted ID: %d, Rows affected: %dn", lastID, rowCnt)
使用占位符 ? 防止 SQL 注入支持传多个参数,比如 "INSERT INTO table (a, b) VALUES (?, ?)", val1, val2如果你需要批量插入,可以考虑拼接语句或使用事务
更新与删除(Update & Delete)
更新和删除操作也使用 Exec() 方法,它们不会返回数据行,只关心影响了多少行记录。
更新数据
result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", "Jerry", 1)if err != nil { panic(err)}cnt, _ := result.RowsAffected()fmt.Printf("Updated %d rowsn", cnt)
删除数据
result, err := db.Exec("DELETE FROM users WHERE id = ?", 1)if err != nil { panic(err)}cnt, _ := result.RowsAffected()fmt.Printf("Deleted %d rowsn", cnt)
更新和删除时要特别小心 WHERE 条件,防止误删/误改可以先用 SELECT 看看要操作的数据对不对
小贴士
不要忘记错误检查:每一步都可能出错,特别是数据库交互部分。使用结构体封装逻辑更清晰:可以把查询、插入等封装成函数或方法。别忽视连接池配置:可以通过 SetMaxOpenConns() 和 SetMaxIdleConns() 控制连接池大小。开发阶段建议开启日志:方便调试 SQL 执行情况。
基本上就这些内容了。虽然看起来有点繁琐,但一旦熟悉之后,database/sql 的模式其实很统一,也不难掌握。只要注意细节,CRUD 操作就能稳稳地跑起来。
以上就是Golang初学者如何操作MySQL数据库 介绍database/sql的基本CRUD的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1395715.html
微信扫一扫
支付宝扫一扫