Skip to content

mysql

在 Go 中连接 MySQL 数据库,通常使用 github.com/go-sql-driver/mysql 驱动。以下是一个简单的示例,演示如何在 Go 中使用 MySQL。

1. 安装 MySQL 驱动

首先,确保安装了 go-sql-driver/mysql 库:

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

2. 示例代码:连接 MySQL 数据库

go
package main

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

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

func main() {
    // 配置连接字符串
    connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
    
    // 打开数据库连接
    db, err := sql.Open("mysql", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Successfully connected to the MySQL database!")

    // 执行一个简单的查询
    var result string
    err = db.QueryRow("SELECT 'Hello, MySQL!'").Scan(&result)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(result)
}

解释:

  1. sql.Open("mysql", connStr) 连接到 MySQL 数据库。connStr 是 MySQL 的连接字符串,格式为:username:password@tcp(127.0.0.1:3306)/dbname,其中:

    • username 是你的 MySQL 用户名。
    • password 是你的 MySQL 密码。
    • 127.0.0.1:3306 是 MySQL 的主机和端口。
    • dbname 是你要连接的数据库名。
  2. db.Ping() 用于测试与数据库的连接是否成功。

  3. db.QueryRow("SELECT 'Hello, MySQL!'").Scan(&result) 执行一个简单的查询,并将结果扫描到 result 变量中。

3. 插入数据示例:

go
package main

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

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

func main() {
    // 配置连接字符串
    connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
    
    // 打开数据库连接
    db, err := sql.Open("mysql", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Successfully connected to the MySQL database!")

    // 插入数据
    result, err := db.Exec("INSERT INTO your_table (column1, column2) VALUES (?, ?)", "value1", "value2")
    if err != nil {
        log.Fatal(err)
    }

    // 获取插入的行ID
    lastInsertID, err := result.LastInsertId()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Inserted row with ID: %d\n", lastInsertID)
}

4. 查询多条记录示例:

go
package main

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

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

func main() {
    // 配置连接字符串
    connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
    
    // 打开数据库连接
    db, err := sql.Open("mysql", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试数据库连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Successfully connected to the MySQL database!")

    // 查询多条数据
    rows, err := db.Query("SELECT column1, column2 FROM your_table")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // 遍历结果集
    for rows.Next() {
        var column1 string
        var column2 string
        if err := rows.Scan(&column1, &column2); err != nil {
            log.Fatal(err)
        }
        fmt.Printf("column1: %s, column2: %s\n", column1, column2)
    }

    // 检查遍历是否发生错误
    if err := rows.Err(); err != nil {
        log.Fatal(err)
    }
}

解释:

  1. db.Exec() 用于执行插入、更新或删除语句。通过 ? 占位符传递参数,防止 SQL 注入。
  2. result.LastInsertId() 返回插入的最后一条记录的 ID。
  3. db.Query() 用于查询多条记录。rows.Next() 用于遍历每一行,并将字段值通过 rows.Scan() 填充到变量中。

这样你就可以使用 Go 连接并操作 MySQL 数据库了。如果需要更高级的功能,可以参考 go-sql-driver/mysql 的文档。