go语言访问mysql数据库
newsyoung1 · · 6661 次点击 · · 开始浏览Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动
原文来自:http://hao.jobbole.com/go-mysql-driver/
Go语言的 database/sql 包的一个 MySQL驱动。
特性
- 轻量级与快速
- 原生Go语言,没有C绑定,只有纯Go
- 没有不安全的操作(类型转换等)
- 动态处理崩溃的连接
- 动态连接池
- 支持大于16MB的查询
- 完全
sql.RawBytes支持
环境要求
- Go 1以上
- MySQL (Version 4.1 or higher), MariaDB or Percona Se
- rver
安装
简单地使用 go tool 在shell中把安装包加到你的$GOPATH
$
go get github.com/go-sql-driver/mysql使用
sql包的用法简洁明了:
1、建立连接
首先是Open,
db, err := sql.Open("mysql", "user:password@/dbname")
db 是一个*sql.DB类型的指针,在后面的操作中,都要用到db
open之后,并没有与数据库建立实际的连接,与数据库建立实际的连接是通过Ping方法完成。此外,db应该在整个程序的生命周期中存在,也就是说,程序一启动,就通过Open获得db,直到程序结束,再Close db,而不是经常Open/Close。
err = db.Ping()
2、基本用法
DB的主要方法有:
Query 执行数据库的Query操作,例如一个Select语句,返回*Rows
QueryRow 执行数据库至多返回1行的Query操作,返回*Row
PrePare 准备一个数据库query操作,返回一个*Stmt,用于后续query或执行。这个Stmt可以被多次执行,或者并发执行
Exec 执行数不返回任何rows的据库语句,例如delete操作
Stmt的主要方法:
Exec
Query
QueryRow
Close
用法与DB类似
Rows的主要方法:
Cloumns: 返回[]string,column names
Scan:
Next:
Close:
详见:
http://golang.org/pkg/database/sql/
https://github.com/go-sql-driver/mysql/wiki/Examples
https://github.com/VividCortex/go-database-sql-tutorial
这篇文章有很多示例,通俗易懂
一段简单的测试代码:
package
mainimport
("database/sql"_ "github.com/go-sql-driver/mysql""log")func
insert(db *sql.DB) {stmt,
err := db.Prepare("INSERT
INTO user(username, password) VALUES(?, ?)")defer
stmt.Close()if
err != nil {log.Println(err)return}stmt.Exec("guotie", "guotie")stmt.Exec("testuser", "123123")}func
main() {db,
err := sql.Open("mysql", "root:guotie@/hello")if
err != nil {log.Fatalf("Open
database error: %s\n",
err)}defer
db.Close()err
= db.Ping()if
err != nil {log.Fatal(err)}insert(db)rows,
err := db.Query("select
id, username from user where id = ?", 1)if
err != nil {log.Println(err)}defer
rows.Close()var
id intvar
name stringfor
rows.Next() {err
:= rows.Scan(&id, &name)if
err != nil {log.Fatal(err)}log.Println(id,
name)}err
= rows.Err()if
err != nil {log.Fatal(err)}}github地址https://github.com/go-sql-driver/mysql,官网地址 http://godoc.org/github.com/go-sql-driver/mysql。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动
原文来自:http://hao.jobbole.com/go-mysql-driver/
Go语言的 database/sql 包的一个 MySQL驱动。
特性
- 轻量级与快速
- 原生Go语言,没有C绑定,只有纯Go
- 没有不安全的操作(类型转换等)
- 动态处理崩溃的连接
- 动态连接池
- 支持大于16MB的查询
- 完全
sql.RawBytes支持
环境要求
- Go 1以上
- MySQL (Version 4.1 or higher), MariaDB or Percona Se
- rver
安装
简单地使用 go tool 在shell中把安装包加到你的$GOPATH
$
go get github.com/go-sql-driver/mysql使用
sql包的用法简洁明了:
1、建立连接
首先是Open,
db, err := sql.Open("mysql", "user:password@/dbname")
db 是一个*sql.DB类型的指针,在后面的操作中,都要用到db
open之后,并没有与数据库建立实际的连接,与数据库建立实际的连接是通过Ping方法完成。此外,db应该在整个程序的生命周期中存在,也就是说,程序一启动,就通过Open获得db,直到程序结束,再Close db,而不是经常Open/Close。
err = db.Ping()
2、基本用法
DB的主要方法有:
Query 执行数据库的Query操作,例如一个Select语句,返回*Rows
QueryRow 执行数据库至多返回1行的Query操作,返回*Row
PrePare 准备一个数据库query操作,返回一个*Stmt,用于后续query或执行。这个Stmt可以被多次执行,或者并发执行
Exec 执行数不返回任何rows的据库语句,例如delete操作
Stmt的主要方法:
Exec
Query
QueryRow
Close
用法与DB类似
Rows的主要方法:
Cloumns: 返回[]string,column names
Scan:
Next:
Close:
详见:
http://golang.org/pkg/database/sql/
https://github.com/go-sql-driver/mysql/wiki/Examples
https://github.com/VividCortex/go-database-sql-tutorial
这篇文章有很多示例,通俗易懂
一段简单的测试代码:
package
mainimport
("database/sql"_ "github.com/go-sql-driver/mysql""log")func
insert(db *sql.DB) {stmt,
err := db.Prepare("INSERT
INTO user(username, password) VALUES(?, ?)")defer
stmt.Close()if
err != nil {log.Println(err)return}stmt.Exec("guotie", "guotie")stmt.Exec("testuser", "123123")}func
main() {db,
err := sql.Open("mysql", "root:guotie@/hello")if
err != nil {log.Fatalf("Open
database error: %s\n",
err)}defer
db.Close()err
= db.Ping()if
err != nil {log.Fatal(err)}insert(db)rows,
err := db.Query("select
id, username from user where id = ?", 1)if
err != nil {log.Println(err)}defer
rows.Close()var
id intvar
name stringfor
rows.Next() {err
:= rows.Scan(&id, &name)if
err != nil {log.Fatal(err)}log.Println(id,
name)}err
= rows.Err()if
err != nil {log.Fatal(err)}}github地址https://github.com/go-sql-driver/mysql,官网地址 http://godoc.org/github.com/go-sql-driver/mysql。