如何在 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)
}
}
我已经从 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)
}
}