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 实例讲解
- JavaScript 技术篇-navigator.permissions读取chrome剪切板权限获取不生效原因:只有在https协议下使用有效。手动设置chrome页面剪切板读取权限方法
- 生产prometheus-operator 监控二进制kubernetes
- Excel 技术篇-跨页签统计某一区域下符合条件值的数量方法,COUNTIF函数、数量统计公式的用法实例演示
- Oracle 数据库用户锁定与解锁,用户锁定最大密码失败次数设置方法,ORA-28000: the account is locked问题解决方法
- TypeScript 注意事项
- Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题
- 前端如何分片上传文件?
- PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
- Python 技巧篇-官方网站打不开的情况下通过官方获取最新python安装包方法
- MySQL 技术篇- linux下mysql数据库利用binlog文件进行数据回滚实例演示,binlog恢复数据库的两种方式
- Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看
- dbvis 数据库连接工具-更新数据库驱动方法示例演示,驱动与数据库版本不匹配问题:Unknown system variable ‘query_cache_size‘解决方法
- Chrome 插件开发-主动获取所有页签的tabid,background.js直接向所有页签同步传递消息
- Python 技术篇-httpClient库连接服务器发送请求解析响应实例演示,No module named ‘httplib‘问题解决方法
- Windows 技术篇-windows家庭版win+R运行搜不到gpedit.msc组策略编辑器解决方法,windows安装组策略编辑器方法