如何在 Go 中创建 MySQL 数据库 (table) 并执行 CRUD 操作

How to create a MySQL database (table) in Go and perform CRUD operations

我已经从 github.com/go-sql-driver/mysql 并已成功建立与数据库的连接。 我只想开始创建一个 table 并能够从中更新、获取和删除数据 我看到的其他资源似乎跳过了这部分或者只是不清楚(他们似乎开始获取数据,我想..数据从哪里来,他们是如何创建的)我只是想清楚解释谢谢。

// main.go
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

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

2020 年 5 月 16 日更新:
事实证明,正如@mkopriva 在评论中指出的那样,我什至不知道数据库服务器首先必须是 运行(我想这是我挑战的最初来源......现在我喜欢还有什么我想连接到...duh...lol)
P.S。防火墙对我来说不是问题。

您可以使用 *sql.DB 提供的方法 Exec, Query, and QueryRow 将您的 SQL 命令发送到连接的数据库。

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
    if err != nil {
        panic(err)
    } else if err = db.Ping(); err != nil {
        panic(err)
    }
    defer db.Close()

    _, err := db.Exec("CREATE TABLE IF NOT EXISTS mytable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, some_text TEXT NOT NULL)")
    if err != nil {
        panic(err)
    }

    // Create
    res, err := db.Exec("INSERT INTO mytable (some_text) VALUES (?)", "hello world")
    if err != nil {
        panic(err)
    }

    // get the id of the newly inserted record
    id, err := res.LastInsertId()
    if err != nil {
        panic(err)
    }

    // Read
    var someText string
    row := db.QueryRow("SELECT some_text FROM mytable WHERE id = ? LIMIT 1", id)
    if err := row.Scan(&someText); err != nil {
        panic(err)
    }
    fmt.Println(someText)

    // Update
    _, err = db.Exec("UPDATE mytable SET some_text = ? WHERE id = ?", "Hello, 世界", id)
    if err != nil {
        panic(err)
    }

    // Delete
    _, err = db.Exec("DELETE FROM mytable WHERE id = ?", id)
    if err != nil {
        panic(err)
    }
}