📜  如何在 MySQL 中使用 Go?(1)

📅  最后修改于: 2023-12-03 15:08:43.277000             🧑  作者: Mango

如何在 MySQL 中使用 Go?

MySQL 是一个流行的关系型数据库管理系统,而 Go 是一种主要用于构建高效网络服务和分布式系统的编程语言。在 Go 中,我们可以使用许多可用的库和包,以简单的方式来连接 MySQL 数据库,无论是使用 MySQL 的原生驱动程序,还是使用 SQL 库。

连接MySQL数据

要连接 MySQL 数据库,我们需要使用 MySQL 的驱动程序包。Go 官方提供了可以在 Go 代码中直接使用的 MySQL 驱动程序包,我们可以使用 go get 命令从 Go 中下载安装它。

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

此外,我们还需要导入此包并使用它。下面是一个连接到 MySQL 数据库并查询数据的示例代码:

package main

import (
    "database/sql"
    "fmt"

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        err = rows.Scan(&id, &name)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(id, name)
    }

    err = rows.Err()
    if err != nil {
        panic(err.Error())
    }
}

在这个例子中,我们将本地 MySQL 数据库的用户名、密码和数据库名称传递给 sql.Open 函数来建立与数据库的连接。我们使用 db.Query 函数查询 users 表并遍历结果集。

执行查询

我们可以使用 db.Query 函数来执行查询语句,并返回一个 *sql.Rows 对象。该对象提供了一种迭代结果集行的方法,即 rows.Next,我们使用 Scan 函数从每一行中提取需要的数据。为了及时回收连接池的连接,我们需要在遍历完成后关闭结果集和数据库连接。

执行更新

除了查询,我们还可以使用 db.Exec 函数来执行更新和删除操作。Exec 函数返回一个 sql.Result 对象,可以访问受影响的行数、自增 ID 等信息。下面是一个示例代码:

package main

import (
    "database/sql"
    "fmt"

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", "New Name", 1)
    if err != nil {
        panic(err.Error())
    }

    rowsAffected, err := result.RowsAffected()
    if err != nil {
        panic(err.Error())
    }
    lastInsertID, err := result.LastInsertId()
    if err != nil {
        panic(err.Error())
    }

    fmt.Println("Rows affected:", rowsAffected)
    fmt.Println("Last inserted ID:", lastInsertID)
}

在这个例子中,我们使用 db.Exec 函数更新 users 表中 id=1 的记录。我们还使用 result.RowsAffected 和 result.LastInsertId 函数获取修改的行数和最后插入的自增 ID。

总结

通过使用 MySQL 驱动程序包和 Go,我们可以很容易地连接到 MySQL 数据库,执行查询和更新操作,并从结果集中提取所需的数据。我们还可以使用其他库和包,例如 orm 库,添加更高级的功能来帮助简化我们的代码。但务必要小心避免 SQL 注入攻击,如需动态构建 SQL 语句,应使用 ? 占位符或转义特殊字符。