前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL

Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL

作者头像
frank.
发布2020-08-31 22:29:15
1.4K0
发布2020-08-31 22:29:15
举报

01

概念

在 Go 语言中,sql 包提供了数据库的通用接口,并且 sql 包必须与数据库驱动包一起使用,Go 标准库中没有数据库驱动包,需要使用第三方的数据库驱动包。需要注意的是,写代码时不要忘记导入三方数据库驱动包。

sql 包的 Open 函数打开一个通过一个数据库驱动名称(driverName)和一个数据库驱动数据源名称(dataSourceName)指定的数据库,该数据源名称至少包含数据库连接信息和数据库名称,该函数返回 *DB。

Open 函数可能只是在不创建数据库连接的情况下验证其参数,如果想要验证数据源名称是否合法,需要调用 Ping 方法。

返回的 *DB 可以安全地供多个 goroutine 并发使用,并维护一个自己的空闲数据库连接池,因此,Open 函数应仅被调用一次,很少需要关闭数据库连接。

02

连接池 DB

DB 常用方法:

代码语言:javascript
复制
func (db *DB) Ping() error

Ping 方法用来验证数据库连接是否有效,并在必要时可以创建新的数据库连接。

代码语言:javascript
复制
func (db *DB) SetMaxOpenConns(n int)

SexMaxOpenConns 方法限制最大开启连接数,如果 n<=0,代表不限制开启连接数,默认值为 0,不限制;

如果 n 小于最大空闲连接数,将会把最大空闲连接数减小到与最大开启连接数一致。

代码语言:javascript
复制
func (db *DB) SetMaxIdleConns(n int)

SetMaxIdleConns 方法限制最大空闲连接数,如果 n<=0,代表不保留空闲连接,当前版本默认值为 2;

如果 n 大于最大开启连接数(最大开启连接数大于 0),将会把新的最大空闲连接数减小到与最大开启连接数一致。

代码语言:javascript
复制
func (db *DB) Begin() (*Tx, error)

开始一个事务,事务隔离级别取决于使用的三方数据库驱动包。

03

结果集 Result

常用方法:

代码语言:javascript
复制
func (Result) LastInsertId() (int64, error)

LastInsertId 方法返回数据库的数据表自增主键。

代码语言:javascript
复制
func (Result) RowsAffected() (int64, error)

RowsAffected 方法返回受更新,插入或删除影响的行数。

04

预声明 Stmt

常用方法:

代码语言:javascript
复制
func (s *Stmt) Exec(args ...interface{}) (Result, error)

Exec 用给定的参数执行一个预声明,并返回一个结果集。

代码语言:javascript
复制
func (s *Stmt) Close() error

Close 关闭预声明。

代码语言:javascript
复制
func (s *Stmt) QueryRow(args ...interface{}) *Row

QueryRow 方法使用给定的参数执行预处理好的查询语句。如果在执行语句期间发生错误,则该错误将通过在返回的 *Row 调用 Scan 来返回,该值始终为nil。如果查询未选择任何行,则 *Row 将返回ErrNoRows。否则,*Row 将返回所选的第一行,并丢弃其余的行。

代码语言:javascript
复制
func (s *Stmt) Query(args ...interface{}) (*Rows, error)

Query 方法使用给定的参数执行预处理的查询语句,并将查询结果作为 * Rows 返回。

05

查询结果 Row 和 Rows

常用方法:

代码语言:javascript
复制
func (r *Row) Scan(dest ...interface{}) error

Scan 方法将匹配的行中的列复制到 dest 指向的值中。如果与查询匹配的行超过一个,则Scan使用第一行并丢弃其余行。如果没有行与查询匹配,则 Scan返回 ErrNoRows。

代码语言:javascript
复制
func (rs *Rows) Next() bool

Next 方法准备下一个结果行,以使用 Scan 方法读取。如果成功,它将返回true;如果没有下一个结果行或在准备它时发生错误,则返回false。应调用 Rows 类型的 Err 方法来区分这两种情况。每次调用 Scan,甚至是第一个,都必须先调用 Next。

06

事务 Tx

常用方法:

代码语言:javascript
复制
func (tx *Tx) Commit() error

提交事务。

代码语言:javascript
复制
func (tx *Tx) Rollback() error

回滚事务。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

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

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

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