Go语言安装MySQL数据库驱动步骤
- 安装驱动:
go get github.com/go-sql-driver/mysql
- 检测安装是否成功:
sudo find ./ -name "go-sql-driver"
- 进入mysql目录。
ls -l | wc -l
一共32个文件
导入MySQL数据库驱动
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
测试连接数据库
- 导入驱动
- 准备信息,打开连接,返回一个结构体指针*DB。但是这个指针暂时无效
- 使用db.Ping()函数成功时,*DB指针可用。
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
)
func main() {
db, err := sql.Open("mysql", "root:123456@tcp(192.168.16.20:3306)/mydb1")
defer db.Close()
if err != nil {
fmt.Println("open err:", err)
return
}
err = db.Ping()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("连接成功!")
}
插入
单行插入
- 准备sql语句
result, err := db.Exec()
执行sql语句,result本质是interface- result.RowAffected()获取sql语句影响的行数
多行插入
- 准备sql语句
result, err := db.Exec()
执行sql语句,result本质是interface- result.RowAffected()获取sql语句影响的行数
例如:
sql := "insert into b1 values(103),(104),(105)"
r, err := db.Exec(sql)
if err != nil {
fmt.Println(err)
return
}
n, err := r.RowsAffected()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("insert into ok!", n, "row affected.")
预处理插入
- 准备插入数据库的数据
- 准备带占位符的sql语句
- 预处理
stmt, err := db.Prepare(sql)
- 传参执行
stmt.Exec()
stmt, err := db.Prepare("insert into stu values(?,?)")
if err != nil {
fmt.Println("Prepare err:", err)
return
}
for _, s := range str {
stmt.Exec(s[0], s[1])
}
查询
单行查询
- 准备查询的sql语句
- 执行单行sql语句
- 按表的字段数,定义变量
- 使用Scan()获取变量值
多行查询
- 准备查询的sql语句
- 执行多行sql语句
- 按表的字段数,定义变量
- 使用rows.Next()和for搭配,判断游标是否指向一条记录
- 使用Scan()获取变量值
sql := "select * from b1 where id>1"
//查询
rows, err := db.Query(sql)
if err != nil {
fmt.Println(err)
return
}
var id int
for rows.Next() {
//接收值
rows.Scan(&id)
fmt.Println(id)
}
预处理查询
- 准备带有占位符查询的sql语句
- db.Prepare(sql)预处理sql语句得到stmt
- 使用stmt.Query()使用预处理调用查询,同时给占位符传参
- 使用rows.Next()和for搭配,判断游标是否指向一条记录
- 使用Scan()获取变量值
sql := "select * from b1 where id>?;"
//预处理sql
stmt, err := db.Prepare(sql)
//预处理查询
rows, err := stmt.Query(3)
if err != nil {
fmt.Println(err)
return
}
var id int
for rows.Next() {
//接收值
rows.Scan(&id)
fmt.Println(id)
}