前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang sql数据库已关闭,数据库too many connections

golang sql数据库已关闭,数据库too many connections

作者头像
hotqin888
发布2019-10-22 15:27:16
1.9K0
发布2019-10-22 15:27:16
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/hotqin888/article/details/102150778

最近零碎学习了一点sql的连接方面的知识。在之前,要么数据库已关闭,要么连接数超出最大数,纠结。

1.open后是否要close?实际上不用close,在调用的function里,具体到db.Query后,用defer rows.Close()就行了。

2. 而QueryRow后面不需要close。

3.begin()是事务准备。var tx *sql.Tx和defer tx.Rollback()

https://www.cnblogs.com/tsiangleo/p/4483657.html

https://segmentfault.com/a/1190000003036452

https://www.cnblogs.com/wangchaowei/p/7994022.html

也就是说Ping和Exec方法在调用完之后,会自动释放连接。把代码中所有不需要返回值的语句改成由Exce方法执行,go run 一下,ok,连接数终于正常了!

问题是解决了,总起来以后要注意一下的东西:

  • 程序连接数据库会有连接泄漏的情况,需要及时释放连接
  • Go sql包中的Query和QueryRow(@qgymje 在评论中提到,QueryRow通过调用Scan方法,会自动关闭连接的)两个方法的连接不会自动释放连接,只有在遍历完结果或者调用close方法才会关闭连接
  • Go sql中的Ping和Exec方法在调用结束以后就会自动释放连接
  • 忽略了函数的某个返回值不代表这个值就不存在了,如果该返回值需要close才会释放资源,直接忽略了就会导致资源的泄漏。
  • 有close方法的变量,在使用后要及时调用该方法,释放资源

https://studygolang.com/articles/11951?fr=sidebar

golang Mysql -- Tx

atabase/sql提供了事务处理的功能。通过Tx对象实现。db.Begin会创建tx对象,后者的Exec和Query执行事务的数据库操作,最后在tx的Commit和Rollback中完成数据库事务的提交和回滚,同时释放连接。

tx事务环境中,只有一个数据库连接,事务内的Eexc都是依次执行的,事务中也可以使用db进行查询,但是db查询的过程会新建连接,这个连接的操作不属于该事务。

https://www.cnblogs.com/flash55/p/11166541.html

代码语言:javascript
复制
tx := db.Begin()
tx.Rollback()  // 回滚
tx.Commit()
//然后通过tx操作Exec, Query, QueryRow and Prepare 方法,流程和上面一样。示例
tx, err := db.Begin()
stmt, err := tx.Prepare(`UPDATE student SET age=? WHERE id=?`)
_, err = stmt.Exec(18, 5)
if err != nil {
    tx.Rollback()
    panic(err)
}
err = tx.Commit()
if err != nil {
    tx.Rollback()
    panic(err)
}
代码语言:javascript
复制
导入
    "database/sql"
    "github.com/go-sql-driver/mysql"
类包
 
Tx,_ := connectMysql.Begin()
stm,_ := Tx.Preapare("insert into test values(?,null)")
result,_ := stm.Exec('123')
error := Tx.Commit()或者error := Tx.Rollback()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • golang Mysql -- Tx
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档