GO语言操作mysql数据库

mysql库的安装:

直接在vscode终端运行

1
go get -u github.com/go-sql-driver/mysql

 下载完之后,导入包

1
2
3
4
5
6
import (
    "database/sql"
    "fmt"
 
    _ "github.com/go-sql-driver/mysql"
)

数据库初始化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//定义全局变量db,方便之后对数据库操作
var db *sql.DB
 
//定义一个初始化数据库函数
func initDB() (err error) {
    dsn := "root:密码@tcp(127.0.0.1:3306)/操作的数据库?charset=utf8mb4&parseTime=True"
    //打开数据库
    db, err = sql.Open("mysql", dsn)
    if err != nil {
        return err
    }
    //尝试与数据库建立连接(校验dsn是否正确)
    err = db.Ping()
    if err != nil {
        return err
    }
    return nil
}

插入数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func insertData() {
        //这里“?"充当占位符
    sqlStr := "insert into user_tbl(username,password) values (?, ?)"
        //返回执行sql语句的结果集和报错
    r, err := db.Exec(sqlStr, "张三", "zs123")
    if err != nil {
        fmt.Printf("insert failed,err: %v\n", err)
        return
    } else {
        i, _ := r.LastInsertId()
        fmt.Printf("i: %v\n", i)
    }
 
}

查询一行数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type User struct {
    id       int
    username string
    password string
}
 
func queryOneRow() {
    s := "select * from user_tbl where id = ?"
    var u User
    //这里scan是把前面查询结果赋值给另一个对象(User)
    err := db.QueryRow(s, 1).Scan(&u.id, &u.username, &u.password)
    if err != nil {
        fmt.Printf("err: %v\n", err)
    } else {
        fmt.Printf("u: %v\n", u)
    }
}

查询多行数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func queryManyRow() {
    s := "select * from user_tbl"
    r, err := db.Query(s)
    var u User
    defer r.Close()
    if err != nil {
        fmt.Printf("err: %v\n", err)
    } else {
                //从结果集中遍历每行数据
        for r.Next() {
            r.Scan(&u.id, &u.username, &u.password)
            fmt.Printf("u: %v\n", u)
        }
    }
}

更新数据:

1
2
3
4
5
6
7
8
9
10
11
func update() {
    s := "update user_tbl set username=?, password=? where id=?"
    r, err := db.Exec(s, "big kite", "456789", 2)
    if err != nil {
        fmt.Printf("err: %v\n", err)
    } else {
                //RowsAffected返回影响了几行和错误
        i, _ := r.RowsAffected()
        fmt.Printf("i: %v\n", i)
    }
}

删除数据:

跟上述更新类似,只是sql语句不同而已

delete from user_tbl where id=?

 

posted @   nLesxw  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示