Go 操作 Mysql
Posted kaichenkai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 操作 Mysql相关的知识,希望对你有一定的参考价值。
开发环境准备
Go 操作 mysql 需要使用的包:go-sql-driver/mysql 和 sqlx
sqlx 包是作为 database/sql 包的一个额外扩展包,在原有的 database/sql 上加了很多扩展,如果将查询的数据转为结构体,大大简化了代码书写,当然,database/sql 包中的方法同样起作用
github 地址:
- https://github.com/go-sql-driver/mysql
- https://github.com/jmoiron/sqlx
安装:
go get "github.com/go-sql-driver/mysql" go get "github.com/jmoiron/sqlx"
连接数据库示例:
var Db *sqlx.DB db, err := sqlx.Open("mysql","username:[email protected](ip:port)/database?charset=utf8") Db = db
处理类型(Handle Types)
sqlx 设计和 database/sql 使用方法是一样的,包含有 4 个主要的 handle types
- sqlx.DB 表示数据库(与 sql.DB 相似)
- sqlx.Tx 表示事物(与 sql.Tx 相似)
- sqlx.Stmt 表示 prepared statement(和 sql.Stmt 相似)
- sqlx.NamedStmt 表示 prepared statement(支持 named parameters)
所有的 handle types 都提供了对 database/sql 的兼容,意味着当你调用 sqlx.DB.Query 时,可以直接替换为 sql.DB.Query,这就使得 sqlx 可以很容易的加入到已有的数据库项目中
此外,sqlx 还有两个 cursor 类型:
- sqlx.Rows (和 sql.Rows 类似,Queryx 返回)
- sqlx.Row (和 sql.Row 类似,QueryRowx 返回)
相比 database/sql 还多了新的方法,也就是将获取的数据直接转换成 结构体
- Get(dest interface, ...) error
- Select(dest interface, ...) error
建表
以下所有 demo 都以下表结构作为基础
CREATE TABLE `userinfo` ( `uid` INT(10) NOT NULL AUTO_INCREMENT, `create_time` datetime DEFAULT NULL, `username` VARCHAR(64) DEFAULT NULL, `password` VARCHAR(32) DEFAULT NULL, `department` VARCHAR(64) DEFAULT NULL, `email` varchar(64) DEFAULT NULL, PRIMARY KEY (`uid`) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Exec() 方法使用
Exec 和 MustExec 从连接池中获取一个连接然后指向对应的 query 操作,对于不支持 ad-hoc query execution 的驱动,在操作执行的背后会创建一个 prepared statement,在结果返回前,这个 connection 会返回到连接池中
需要注意的是,不同的数据库,使用的占位符不同,mysql 采用 ? 作为占位符
- Mysql 使用 ?
- PostgreSQL 使用 1,1,2 等等
- SQLLite 使用 ? 或 $1
- Oracle 使用 :name (注意有冒号)
增删
以上是关于Go 操作 Mysql的主要内容,如果未能解决你的问题,请参考以下文章