package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动程序
)
func main() {
// 连接 MySQL 数据库
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/cysql")
if err != nil {
log.Fatal(err) // 如果连接失败,记录错误并退出程序
}
defer db.Close() // 延迟关闭数据库连接
// 测试数据库连接
err = db.Ping()
if err != nil {
log.Fatal("Database connection failed:", err) // 如果连接失败,记录错误并退出程序
}
fmt.Println("Database connected successfully") // 连接成功提示
// 创建表
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
)`)
if err != nil {
log.Fatal("Table creation failed:", err) // 如果创建表失败,记录错误并退出程序
}
fmt.Println("Table created successfully") // 表创建成功提示
// 插入数据
insertStmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
if err != nil {
log.Fatal("Insert statement preparation failed:", err) // 如果插入语句准备失败,记录错误并退出程序
}
defer insertStmt.Close() // 延迟关闭插入语句准备
result, err := insertStmt.Exec("Alice", 30)
if err != nil {
log.Fatal("Insert data failed:", err) // 如果插入数据失败,记录错误并退出程序
}
rowsAffected, _ := result.RowsAffected() // 获取受影响的行数
fmt.Println("Inserted", rowsAffected, "rows") // 输出插入的行数
// 查询数据
rows, err := db.Query("SELECT * FROM users")
if err != nil {
log.Fatal("Query data failed:", err) // 如果查询数据失败,记录错误并退出程序
}
defer rows.Close() // 延迟关闭查询结果集
fmt.Println("Retrieving data:")
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age) // 扫描每一行的数据
if err != nil {
log.Fatal(err) // 如果扫描失败,记录错误并退出程序
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age) // 输出每一行的数据
}
// 更新数据
updateStmt, err := db.Prepare("UPDATE users SET age=? WHERE name=?")
if err != nil {
log.Fatal("Update statement preparation failed:", err) // 如果更新语句准备失败,记录错误并退出程序
}
defer updateStmt.Close() // 延迟关闭更新语句准备
result, err = updateStmt.Exec(35, "Alice")
if err != nil {
log.Fatal("Update data failed:", err) // 如果更新数据失败,记录错误并退出程序
}
rowsAffected, _ = result.RowsAffected() // 获取受影响的行数
fmt.Println("Updated", rowsAffected, "rows") // 输出更新的行数
// 删除数据
deleteStmt, err := db.Prepare("DELETE FROM users WHERE name=?")
if err != nil {
log.Fatal("Delete statement preparation failed:", err) // 如果删除语句准备失败,记录错误并退出程序
}
defer deleteStmt.Close() // 延迟关闭删除语句准备
result, err = deleteStmt.Exec("Alice")
if err != nil {
log.Fatal("Delete data failed:", err) // 如果删除数据失败,记录错误并退出程序
}
rowsAffected, _ = result.RowsAffected() // 获取受影响的行数
fmt.Println("Deleted", rowsAffected, "rows") // 输出删除的行数
}