在 Go 中, 使用 sql.DB 来访问数据库. 既可以用它来创建语句和事务也能执行查询和检索结果
关于 sql.DB, 你需要知道的第一件事是它不是一个数据库连接. 它也没有映射到任何数据库软件的 database 和 schema 概念. 它代表抽象的接口和数据库的存在, 它可以像本地文件一样通过网络访问, 或在内存和进程中
sql.DB 为你在幕后执行一些重要的任务:
-
它通过驱动程序打开和关闭与实际底层数据库的连接
-
它按需管理一个连接池, 可能是前面提到的各种事物
sql.DB 抽象旨在使你不用担心如何管理对数据库的并发访问. 当你使用连接来执行任务时, 它会被标记为正在使用, 不再使用时, 则会被返回到可用连接池中. 这样做的一个结果是如果你没能将连接释放回池中, 可能导致 sql.DB 打开大量的连接, 进而耗尽资源(过多的连接, 过多的文件句柄, 缺乏可用的网络端口等等), 我们稍后会详细讨论这个问题
创建 sql.DB 后, 你能使用它来查询它所代表的数据库, 也可以用它创建语句和事务