Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
01
概念
在 Go 语言中,sql 包提供了数据库的通用接口,并且 sql 包必须与数据库驱动包一起使用,Go 标准库中没有数据库驱动包,需要使用第三方的数据库驱动包。需要注意的是,写代码时不要忘记导入三方数据库驱动包。
sql 包的 Open 函数打开一个通过一个数据库驱动名称(driverName)和一个数据库驱动数据源名称(dataSourceName)指定的数据库,该数据源名称至少包含数据库连接信息和数据库名称,该函数返回 *DB。
Open 函数可能只是在不创建数据库连接的情况下验证其参数,如果想要验证数据源名称是否合法,需要调用 Ping 方法。
返回的 *DB 可以安全地供多个 goroutine 并发使用,并维护一个自己的空闲数据库连接池,因此,Open 函数应仅被调用一次,很少需要关闭数据库连接。
02
连接池 DB
DB 常用方法:
func (db *DB) Ping() error
Ping 方法用来验证数据库连接是否有效,并在必要时可以创建新的数据库连接。
func (db *DB) SetMaxOpenConns(n int)
SexMaxOpenConns 方法限制最大开启连接数,如果 n<=0,代表不限制开启连接数,默认值为 0,不限制;
如果 n 小于最大空闲连接数,将会把最大空闲连接数减小到与最大开启连接数一致。
func (db *DB) SetMaxIdleConns(n int)
SetMaxIdleConns 方法限制最大空闲连接数,如果 n<=0,代表不保留空闲连接,当前版本默认值为 2;
如果 n 大于最大开启连接数(最大开启连接数大于 0),将会把新的最大空闲连接数减小到与最大开启连接数一致。
func (db *DB) Begin() (*Tx, error)
开始一个事务,事务隔离级别取决于使用的三方数据库驱动包。
03
结果集 Result
常用方法:
func (Result) LastInsertId() (int64, error)
LastInsertId 方法返回数据库的数据表自增主键。
func (Result) RowsAffected() (int64, error)
RowsAffected 方法返回受更新,插入或删除影响的行数。
04
预声明 Stmt
常用方法:
func (s *Stmt) Exec(args ...interface{}) (Result, error)
Exec 用给定的参数执行一个预声明,并返回一个结果集。
func (s *Stmt) Close() error
Close 关闭预声明。
func (s *Stmt) QueryRow(args ...interface{}) *Row
QueryRow 方法使用给定的参数执行预处理好的查询语句。如果在执行语句期间发生错误,则该错误将通过在返回的 *Row 调用 Scan 来返回,该值始终为nil。如果查询未选择任何行,则 *Row 将返回ErrNoRows。否则,*Row 将返回所选的第一行,并丢弃其余的行。
func (s *Stmt) Query(args ...interface{}) (*Rows, error)
Query 方法使用给定的参数执行预处理的查询语句,并将查询结果作为 * Rows 返回。
05
查询结果 Row 和 Rows
常用方法:
func (r *Row) Scan(dest ...interface{}) error
Scan 方法将匹配的行中的列复制到 dest 指向的值中。如果与查询匹配的行超过一个,则Scan使用第一行并丢弃其余行。如果没有行与查询匹配,则 Scan返回 ErrNoRows。
func (rs *Rows) Next() bool
Next 方法准备下一个结果行,以使用 Scan 方法读取。如果成功,它将返回true;如果没有下一个结果行或在准备它时发生错误,则返回false。应调用 Rows 类型的 Err 方法来区分这两种情况。每次调用 Scan,甚至是第一个,都必须先调用 Next。
06
事务 Tx
常用方法:
func (tx *Tx) Commit() error
提交事务。
func (tx *Tx) Rollback() error
回滚事务。
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 新一代Notebook神器出现,Jupyter危险了!
- vmstat 监视内存使用情况
- Android开发重写Animation实现下拉图片后弹射回去效果示例
- Android 中RxPermissions 的使用方法详解
- Android构建Material Design应用详解
- Android中DrawerLayout实现侧滑菜单效果
- Android获取系统储存以及内存信息的方法(一)
- Android开发实现读取excel数据并保存为xml的方法
- 详解Kotlin 中使用和配置 Dagger2
- Android开发使用自定义View将圆角矩形绘制在Canvas上的方法
- Android编程双重单选对话框布局实现与事件监听方法示例
- android调用H5显示加载中效果的示例代码
- Java工作中遇到的问题Method has too many Body parameters的处理办法SpringCloud Feign报错:Method has too many Body par
- Android view滑动悬浮固定效果实现代码示例
- Android编程实现变化的双重选择框功能示例