数据库

sql.DB连接池需知:

  • sql.DB内置连接池,连接不足时会自动创建新连接,新创建的连接使用sql.Open()时传入的dsn来构造。
  • sql.DBClose时只会关闭连接池中的连接,未归还的连接将会在归还时直接关闭。
  • 归还连接时,不会将bad connections放回连接池,会直接关闭。
  • sql.DB的Query/Exec/Ping/Prepare/Begin操作会从连接池取一条连接或者直接创建新的连接,然后在新连接上操作。
  • sql.DB的Query/Exec/Ping/Prepare/Begin等操作取连接时遇到bad connections最多尝试2次,若依然报bad connections错则直接创建新连接。
  • sql.DB即使使用USE dbname切换了库,但是Query和Exec等操作会从连接池取(不确定取出的连接连向哪个db)或创建连接(连哪个db或者不连db依据dsn)。
  • Query占有的连接,在Rows.Next()遍历完成或Rows.Close()调用后释放。
  • QueryRow占有的连接,在Row.Scan()调用后释放。
  • Begin开启事务后Tx占有的连接,在Tx.Commit()Tx.Rollback()后释放。
  • Exec/Ping/Prepare都是执行完直接释放连接
  • sql.Conn和sql.Tx的Query/Exec/Ping/Prepare都是在当前连接上执行操作,不会另获取新连接。
  • 同一个sql.Conn/sql.Tx的QueryExec不要一个操作未完成就执行另一个操作,否则容易报错(busy buffer)
SetMaxOpenConns()

默认无限制
设置最大打开的连接数,若到达则会阻塞操作,直到其他连接释放。

SetConnMaxLifetime()

默认为2
设置连接池最大闲置连接数,若到达则归还的连接会直接关闭。

SetConnMaxLifetime()

如果小于0,则永不过期
闲置连接的最大生命周期,应小于数据库连接的超时时间。
从连接创建时计时或连接池取连接时重新计时,连接只有在连接池中超时才会被清理掉。

Conn()

从连接池取出或者创建一个连接返回。在返回的sql.Conn上Ping,Exec,Query,QueryRow,Begin都是在当前连接上操作。

注意:
sql.Conn连接关闭,会阻塞等连接上的事务完成,直到Tx.Commit()或者Tx.Rollback()。

golang sql.DB的更多相关文章

  1. Golang SQL连接池梳理

    目录 一.如何理解数据库连接 二.连接池的工作原理 三.database/sql包结构 四.三个重要的结构体 4.1.DB 4.2.driverConn 4.3.Conn 五.流程梳理 5.1.先获取 ...

  2. ent 基本使用十一 sql.DB 集成

    这个功能是github中大家提的比较多的一个,所以官方也暴露了相关的api 配置sql.DB 一种方式 package main ​ import ( "time" ​ " ...

  3. 亲测可用的golang sql例程与包管理

    sqlite与golang package main import ( "database/sql" "fmt" "time" _ &quo ...

  4. golang sql database drivers

    https://github.com/golang/go/wiki/SQLDrivers SQL database drivers The database/sql and database/sql/ ...

  5. 使用Automation将Azure SQL DB容灾到本地

    前段时间有个客户有如下需求,将Azure SQL Database数据库容灾到本地(备份频率1小时/次). 那么对于这样的需求,我们可以使用Azure Automation来实现自动化备份到本地. 大 ...

  6. Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper

    Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...

  7. 在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...

  8. 关于Golang中database/sql包的学习

    go-sql-driver 请求一个连接的函数有好几种,执行完毕处理连接的方式稍有差别,大致如下: db.Ping() 调用完毕后会马上把连接返回给连接池. db.Exec() 调用完毕后会马上把连接 ...

  9. golang语言sql Rows转化保存成map

    func DoQuery(db *sql.DB, sqlInfo string, args ...interface{}) ([]map[string]interface{}, error) { ro ...

随机推荐

  1. 对it行业的一些看法

    随着世界产业转移的加速,欧美.日本等发达国家将大量的软件开发业务转移到中国.印度等国家,随之而来的是这些国家对it人才的急切需求! 对比国内的大学生就业形势而言,无疑是it相关专业的毕业生就业压力较少 ...

  2. HTML常用标签及约束

    注释 <!--这是一段注释--> 样式表 外部样式(CSS) <head> <link rel="stylesheet" type="tex ...

  3. js ajax 经典案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. [转帖]学习一下centos7 新地方

    总结的挺好  copy一下 慢慢学习: http://blog.itpub.net/312079/viewspace-2214440/ Centos7 单用户模式 centos7里不再有0-6启动级别 ...

  5. 如何从 GitHub 上下载单个文件夹?

    比如别人把一些资料传到 GitHub 上做分类归档,我怎么才能下载单一分类文件夹? 点击 Raw ,如果是不能预览的文件就会自动下载,如果是文件或者代码什么的,会在浏览器中显示,但可以复制浏览器中链接 ...

  6. ie6 ie7 userdata 本地存储 引发的惨案.

    我使用 documentElement 作为userdata 作为本地存储的载体. document.documentElement.addBehavior("#default#userda ...

  7. 关于字符编码:ascii、unicode与utf-8

    转自:https://foofish.net/unicode_utf-8.html 阮一峰老师对普及计算机基础技术功不可没,但毕竟老师不是神,因此也避免不了对某些概念有一些错误的理解,<字符编码 ...

  8. 怎么解决Xing欲

    怎么解决Xing欲 来源:微信号 王路在隐身 这是知乎上的一道问题.原题叫<和尚怎么解决性欲>. 本来由出家人回答更合适,但估计出家人一般不太愿意回答. 我看了几十个答案,几乎都是在调侃出 ...

  9. MT【157】至少一个小于1

    若函数$f(x)=x^2+ax+b$有两个不等实数根$x_1,x_2$,且$1<x_1<x_2<3$,那么$f(1),f(3)中$    (      )A.只有一个小于1 B.至少 ...

  10. Mininet 系列实验(一)

    关于SDN的第一个实验,似乎实验室里的前辈们也都是从这里开始的. 实验内容 使用源码安装Mininet 参考 Mininet使用源码安装 实验环境 虚拟机:Oracle VM VirtualBox U ...