如何在Golang中使用MySQL数据库_Golang与MySQL数据库连接与操作-Golang

Go连接MySQL最稳妥方式是database/sql加go-sql-driver/mysql驱动;需显式导入驱动,正确配置连接字符串,区分Query/QueryRow/Exec用途,仅用?占位防注入,手动管理事务,并显式设置连接池参数。

Go 语言连接 MySQL 最稳妥的方式是用 database/sql + github.com/go-sql-driver/mysql,不是 ORM,也不是封装层,而是标准接口+专用驱动的组合——它不隐藏细节,出错时你能直接看到 SQL 执行链路上哪一环断了。

安装驱动并建立基础连接

Go 没有内置 MySQL 驱动,必须显式引入第三方驱动。仅导入 database/sql 是不够的,会 panic:”sql: unknown driver ‘mysql'”。

  • 运行 go get -u github.com/go-sql-driver/mysql
  • 在代码中同时导入:"database/sql" 和 "github.com/go-sql-driver/mysql"(后者仅需导入,无需赋值或调用)
  • 连接字符串格式为:"user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true&loc=Local";注意 & 是 URL 中的 & 字符,不能写成 &
  • parseTime=true 让驱动把 DATETIME / TIMESTAMP 自动转成 time.Time;loc=Local 避免时区错乱(否则可能默认 UTC)

Query、QueryRow 与 Exec 的分工

这三个方法不 interchangeable:选错会导致死锁、漏扫描、或误吞错误。

  • db.Query() 用于 SELECT 多行,返回 *sql.Rows,**必须调用 rows.Close()**(哪怕只读一行),否则连接不会释放
  • db.QueryRow() 用于确定只返回一行的 SELECT(如带 LIMIT 1 或主键查询),它内部自动 Close,但你要用 .Scan() 拿数据,否则 Scan 错误会被静默丢弃
  • db.Exec() 用于 INSERT/UPDATE/DELETE,返回 sql.Result,可调 .LastInsertId() 和 .RowsAffected();**不能用它执行 SELECT**,否则返回空结果且无报错

防止 SQL 注入:只用问号占位符,不用字符串拼接

MySQL 驱动不支持命名参数(如 :name 或 @id),只认 ?,且参数必须是切片或单独值,不能是 map 或结构体。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何在Golang中使用MySQL数据库_Golang与MySQL数据库连接与操作-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4030862+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4030862+
  • 本周更新: 0+
  • 最后更新: 2026-03-16