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:password@tcp(ip:port)/database?charset=utf8")
Db = db

  

处理类型(Handle Types)

sqlx 设计和 database/sql 使用方法是一样的,包含有 4 个主要的 handle types

  1. sqlx.DB                        表示数据库(与 sql.DB 相似)
  2. sqlx.Tx                         表示事物(与 sql.Tx 相似)
  3. sqlx.Stmt                      表示 prepared statement(和 sql.Stmt 相似)
  4. 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        (注意有冒号)

增删

猜你喜欢

转载自www.cnblogs.com/kaichenkai/p/11140555.html