Golang&Mysql

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") // 输出删除的行数
}

posted @   cyyyyyyyyyyyyy  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示