0


Go语言操作MySql数据库

   go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库,可以很方便地实现对MySQL数据库的连接和操作。本文记录一下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。

1.安装驱动程序

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

2.导入驱动包

_ "github.com/go-sql-driver/mysql"
说明:当导入带有空白标识符前缀 _ 的包时,将调用包的 init 函数。该函数注册驱动程序

3.操作数据库

3.1 获取mysql版本

func showMysqlVersion() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("数据库连接失败!")
        log.Fatalln(err)
    }

    var version string

    err2 := db.QueryRow("SELECT VERSION()").Scan(&version)

    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println(version)
}

3.2 创建表

func createTable() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully create table")
}

3.3 表中插入数据

func insertItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully insert item")
}

3.4 表中删除数据

func deleteItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    sql := "DELETE FROM user WHERE id = 1"
    res, err2 := db.Exec(sql)

    if err2 != nil {
        panic(err2.Error())
    }

    affectedRows, err := res.RowsAffected()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}

3.5 修改表中数据

func alterItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    sql := "update user set name = ? WHERE id = ?"
    res, err2 := db.Exec(sql, "lisi", 1)

    if err2 != nil {
        panic(err2.Error())
    }

    affectedRows, err := res.RowsAffected()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}

3.6 查询表中数据

func queryItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    var mid int = 1

    result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)
    if err2 != nil {
        log.Fatal(err2)
    }

    for result.Next() {

        var id int
        var name string

        err = result.Scan(&id, &name)

        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("id: %d, name: %s\n", id, name)
    }
}

3.7 删除表

func dropTable() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Exec("DROP TABLE user;")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully drop table")
}

4.综合演示

完整代码如下:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func showMysqlVersion() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("数据库连接失败!")
        log.Fatalln(err)
    }

    var version string

    err2 := db.QueryRow("SELECT VERSION()").Scan(&version)

    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println(version)
}

func createTable() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully create table")
}

func insertItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Query("INSERT INTO user VALUES(1, 'zhangsan')")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully insert item")
}

func deleteItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    sql := "DELETE FROM user WHERE id = 1"
    res, err2 := db.Exec(sql)

    if err2 != nil {
        panic(err2.Error())
    }

    affectedRows, err := res.RowsAffected()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("delete item success, statement affected %d rows\n", affectedRows)
}

func alterItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    sql := "update user set name = ? WHERE id = ?"
    res, err2 := db.Exec(sql, "lisi", 1)

    if err2 != nil {
        panic(err2.Error())
    }

    affectedRows, err := res.RowsAffected()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("alter item success, statement affected %d rows\n", affectedRows)
}

func queryItem() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB?charset=utf8mb4")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    var mid int = 1

    result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)
    if err2 != nil {
        log.Fatal(err2)
    }

    for result.Next() {

        var id int
        var name string

        err = result.Scan(&id, &name)

        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("id: %d, name: %s\n", id, name)
    }
}

func dropTable() {
    db, err := sql.Open("mysql", "root:mysql@tcp(127.0.0.1:3306)/TestDB")
    db.Ping()
    defer db.Close()

    if err != nil {
        fmt.Println("connect DB error !")
        log.Fatalln(err)
    }

    _, err2 := db.Exec("DROP TABLE user;")
    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("successfully drop table")
}

func main() {
    showMysqlVersion()
    createTable()
    insertItem()
    queryItem()
    alterItem()
    queryItem()
    deleteItem()
    dropTable()
}

运行效果:
go mod init mysql-test.go
go build mysql-test.go
./mysql-test

代码结构:

标签: golang mysql

本文转载自: https://blog.csdn.net/hsy12342611/article/details/131562337
版权归原作者 hsy12342611 所有, 如有侵权,请联系我们删除。

“Go语言操作MySql数据库”的评论:

还没有评论