mysql目前来说是使用最为流行的关系型数据库,在程序设计过程中得到广泛应用。golang操作mysql使用最多的包go-sql-driver/mysql。sqlx包是作为database/sql包的一个额外扩展包,在原有的database/sql加了很多扩展,如直接将查询的数据转为结构体,大大简化了代码书写,当然database/sql包中的方法同样起作用。
github地址:
https://github.com/go-sql-driver/mysql
https://github.com/jmoiron/sqlx
golang sql使用:
database/sql documentation
go-database-sql tutorial
安装
go get "github.com/go-sql-driver/mysql"
go get "github.com/jmoiron/sqlx"
连接数据库
var Db *sqlx.DB
db, err := sqlx.Open("mysql","username:password@tcp(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 - 和sql.Stmt相似,表示prepared statement。
sqlx.NamedStmt - 表示prepared statement(支持named parameters)
所有的handler 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
建表
以下所有示例均已以下表结构作为操作基础。
CREATE TABLE `userinfo` (
`uid` INT(10) NOT NULL AUTO_INCREMENT,
`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等等
SQLite 使用?或$1
Oracle 使用:name
Exec增删改示例
查询语法使用Query后续会提到
package main
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"fmt"
)
var Db *sqlx.DB
func init() {
db,err:=sqlx.Open("mysql","u