golang安装mysql数据库配置和驱动
步骤1:安装MySQL数据库
- 访问MySQL官方网站(www.mysql.com)并下载适用于您的操作系统的MySQL安装程序。
- 安装MySQL数据库,并根据提示进行设置和配置。
- 在安装过程中,请记住安装MySQL时的用户名和密码,以便在后续配置中使用。
步骤2:安装MySQL驱动程序
要在Go中连接和操作MySQL数据库,您需要安装MySQL驱动程序。Go中最流行的MySQL驱动程序是go-sql-driver/mysql。
(中间vscode的 go get 出了很多问题可以参考别人写的文档:(blog.csdn.net/qq_24433609…
使用以下命令,使用go mod安装MySQL驱动程序:
go get -u github.com/go-sql-driver/mysql
简单的CRUD
数据库连接
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
// 创建一个全局对象
var db *sql.DB
func initDB() (err error) {
dsn := "root:1610392189@tcp(127.0.0.1:3306)/go_db?charset=utf8mb4&parseTime=True"
//不会效验账号密码是否正确
//注意!!!这里不要使用:=,是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
//尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
func main() {
// db, err := sql.Open("mysql", "root:1610392189@/go_db") //返回一个数据库指针
// if err != nil {
// panic(err)
// }
// print(db)
// //最大连接时长
// db.SetConnMaxLifetime(time.Minute * 3) //三分钟
// //最大连接数
// db.SetMaxOpenConns(10)
// //空闲连接数
// db.SetMaxIdleConns(10)
err := initDB()
if err != nil {
fmt.Printf("初始化失败!,err:%v\n", err)
return
} else {
fmt.Printf("初始化成功")
}
}
查找数据
先创建一个结构体,连接数据库,从数据库查找到的数据,对应这个结构体对象
查询一条用户信息:
type user struct {
id int
username string
password string
}
// 查询一条用户数据
func queryOneRow() {
s := "select * from user_tbl where id =?"
var u user
//确保QueryRow后调用Scan方法,否则持有的数据库不会释放
err := db.QueryRow(s, 1).Scan(&u.id, &u.username, &u.password)
if err != nil {
fmt.Printf("scan failed err:%v\n", err)
return
} else {
fmt.Printf("id:%d name:%s age:%s\n", u.id, u.username, u.password)
}
db.QueryRow(s)
}
查询多条用户信息:
func queryMultiRow() {
sqlStr := "select id,username,password from user_tbl"
rows, err := db.Query(sqlStr)
if err != nil {
fmt.Printf("query failed, err:%v\n", err)
return
}
//非常重要,关闭rows释放持有的数据库连接
defer rows.Close()
//循环读取结果集中的数据
for rows.Next() {
var u user
err := rows.Scan(&u.id, &u.username, &u.password)
if err != nil {
fmt.Printf("scan failed err:%v\n", err)
return
} else {
fmt.Printf("id:%d name:%s age:%s\n", u.id, u.username, u.password)
}
}
}
请将上述代码中的username、password、tcp(127.0.0.1:3306)、database_name、table_name和id替换为您的实际信息和查询条件。
上述代码中的QueryRow()方法用于执行带有查询条件的查询操作,并返回一行结果。然后,我们使用Scan()方法将查询结果读取到相应的变量中。
注意:上述示例代码仅查询一行数据,如果您需要查询多行数据,则可以使用db.Query()方法,并通过遍历rows.Next()来处理多行结果。
像插入,删除,更新数据大差不差
添加数据
添加死数据
func insertData() {
sqlStr := "insert into user_tbl(username,password) values (?,?)"
ret, err := db.Exec(sqlStr, "张三", "123")
if err != nil {
fmt.Printf("insert failed,err :%v\n", err)
return
} else {
i, _ := ret.LastInsertId()
fmt.Printf("i: %v\n", i)
}
}
通过形参添加“活”数据
func insert2(username string, password string) {
sqlStr := "insert into user_tbl(username,password) values (?,?)"
ret, err := db.Exec(sqlStr, username, password)
if err != nil {
fmt.Printf("insert failed,err :%v\n", err)
return
} else {
i, _ := ret.LastInsertId()
fmt.Printf("i: %v\n", i)
}
}
更新数据
func update() {
s := "update user_tbl set username=?,password=? where id=?"
r, err := db.Exec(s, "big kite", "123456", 2)
if err != nil {
fmt.Printf("err:%v\n", err)
} else {
i, _ := r.RowsAffected()
fmt.Printf("i: %v", i)
}
}
删除数据
func delete(){
s:= "delete from user_tlb where id=?"
r,err :=db.Exec(s,1)
if err !=nil{
fmt.Printf("err: %v\n", err)
}else{
i,_ :=r.RowsAffected()
fmt.Println("i:%v删除成功!",i)
}
}