当前位置: 首页 > news >正文

Go基础:用Go语言操作MySQL详解

文章目录

    • 一、MySQL数据库连接
      • 1.1 下载依赖
      • 1.2 初始化连接
      • 1.3 连接池配置
    • 二、MySQL的CRUD操作
      • 2.1 建库建表
      • 2.2 插入数据
      • 2.3 查询数据
      • 2.4 更新数据
      • 2.5 删除数据
    • 三、完整代码案例

一、MySQL数据库连接

Go语言操作MySQL是开发中常见的任务,通过Go语言的标准库database/sql和第三方MySQL驱动(如go-sql-driver/mysql),可以方便地实现数据库的连接、查询、插入、更新和删除等操作。

1.1 下载依赖

在Go语言中操作MySQL,首先需要安装MySQL驱动。常用的驱动是go-sql-driver/mysql,可以通过以下命令安装:

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

1.2 初始化连接

使用database/sql包和MySQL驱动初始化数据库连接。以下是一个简单的连接示例:

package main
import ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)
func main() {// 数据库连接字符串dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"db, err := sql.Open("mysql", dsn)if err != nil {log.Fatal("Failed to open database:", err)}defer db.Close()// 测试连接是否成功err = db.Ping()if err != nil {log.Fatal("Failed to connect to database:", err)}fmt.Println("Successfully connected to MySQL database!")
}

1.3 连接池配置

为了提高性能,可以配置数据库连接池:

db.SetMaxOpenConns(10) // 设置最大打开的连接数
db.SetMaxIdleConns(5)  // 设置最大空闲连接数

二、MySQL的CRUD操作

2.1 建库建表

在操作数据之前,首先需要创建数据库和表。以下是建表SQL语句示例:

CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2.2 插入数据

使用Exec方法插入数据:

func insertUser(db *sql.DB, name string, age int) error {query := "INSERT INTO users (name, age) VALUES (?, ?)"_, err := db.Exec(query, name, age)if err != nil {return err}fmt.Println("User inserted successfully!")return nil
}

调用示例:

err := insertUser(db, "Alice", 25)
if err != nil {log.Fatal("Failed to insert user:", err)
}

2.3 查询数据

使用Query方法查询数据:

func queryUsers(db *sql.DB) error {query := "SELECT id, name, age FROM users"rows, err := db.Query(query)if err != nil {return err}defer rows.Close()fmt.Println("Users:")for rows.Next() {var id intvar name stringvar age intif err := rows.Scan(&id, &name, &age); err != nil {return err}fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)}return nil
}

调用示例:

err := queryUsers(db)
if err != nil {log.Fatal("Failed to query users:", err)
}

2.4 更新数据

使用Exec方法更新数据:

func updateUser(db *sql.DB, id int, newName string, newAge int) error {query := "UPDATE users SET name = ?, age = ? WHERE id = ?"_, err := db.Exec(query, newName, newAge, id)if err != nil {return err}fmt.Println("User updated successfully!")return nil
}

调用示例:

err := updateUser(db, 1, "Bob", 30)
if err != nil {log.Fatal("Failed to update user:", err)
}

2.5 删除数据

使用Exec方法删除数据:

func deleteUser(db *sql.DB, id int) error {query := "DELETE FROM users WHERE id = ?"_, err := db.Exec(query, id)if err != nil {return err}fmt.Println("User deleted successfully!")return nil
}

调用示例:

err := deleteUser(db, 1)
if err != nil {log.Fatal("Failed to delete user:", err)
}

三、完整代码案例

以下是一个完整的Go语言操作MySQL的示例代码,包含连接、插入、查询、更新和删除操作:

package main
import ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)
func main() {dsn := "username:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"db, err := sql.Open("mysql", dsn)if err != nil {log.Fatal("Failed to open database:", err)}defer db.Close()err = db.Ping()if err != nil {log.Fatal("Failed to connect to database:", err)}fmt.Println("Successfully connected to MySQL database!")// 插入数据err = insertUser(db, "Alice", 25)if err != nil {log.Fatal("Failed to insert user:", err)}// 查询数据err = queryUsers(db)if err != nil {log.Fatal("Failed to query users:", err)}// 更新数据err = updateUser(db, 1, "Bob", 30)if err != nil {log.Fatal("Failed to update user:", err)}// 查询更新后的数据err = queryUsers(db)if err != nil {log.Fatal("Failed to query users:", err)}// 删除数据err = deleteUser(db, 1)if err != nil {log.Fatal("Failed to delete user:", err)}// 查询删除后的数据err = queryUsers(db)if err != nil {log.Fatal("Failed to query users:", err)}
}
func insertUser(db *sql.DB, name string, age int) error {query := "INSERT INTO users (name, age) VALUES (?, ?)"_, err := db.Exec(query, name, age)if err != nil {return err}fmt.Println("User inserted successfully!")return nil
}
func queryUsers(db *sql.DB) error {query := "SELECT id, name, age FROM users"rows, err := db.Query(query)if err != nil {return err}defer rows.Close()fmt.Println("Users:")for rows.Next() {var id intvar name stringvar age intif err := rows.Scan(&id, &name, &age); err != nil {return err}fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)}return nil
}
func updateUser(db *sql.DB, id int, newName string, newAge int) error {query := "UPDATE users SET name = ?, age = ? WHERE id = ?"_, err := db.Exec(query, newName, newAge, id)if err != nil {return err}fmt.Println("User updated successfully!")return nil
}
func deleteUser(db *sql.DB, id int) error {query := "DELETE FROM users WHERE id = ?"_, err := db.Exec(query, id)if err != nil {return err}fmt.Println("User deleted successfully!")return nil
}

总结:Go语言通过database/sql包和MySQL驱动,提供了强大的数据库操作能力。本文详细介绍了MySQL的连接、插入、查询、更新和删除操作,并提供了完整的代码示例。

http://www.dtcms.com/a/445787.html

相关文章:

  • 数字短链接生成郑州seo优化
  • 网站排版尺寸安装好的字体怎么用wordpress
  • 如何利用企业微信SCRM打造精准客户营销策略?
  • AI 编程 Trae 如何去 AI 味(以用户管理系统为例子)
  • 【National Treasure2】
  • 【LLM4EDA】: Part 9--LLM4EDA的优化与建模
  • 用parser_tools插件来解析SQL语句
  • 湖北住房和城乡建设厅网站phpmysql做网站
  • 《量子计算》学习笔记:量子计算的基本定义(续)
  • 哈尔滨网站建设价位上海有名的猎头公司
  • 手写MyBatis第94弹:完整架构回顾与核心技术深度解析
  • 汽车电子Autosar架构BSW层学习路线·附录章节
  • 织梦 网站设计做网站竟然不知道cms
  • Linex操作系统-Shell脚本(六)
  • 2025年ASOC SCI2区TOP,基于动态模糊系统的改进灰狼算法FGWO,深度解析+性能实测
  • Go基础:输入与输出格式化详解
  • Go语言:数据压缩与解压详解
  • Odoo 前端控制器:构建无缝集成的网站页面
  • Go基础:json文件处理详解(标准库`encoding/json`)
  • 网站页头尺寸网站建设实物实训目的
  • RegNet:高效可扩展网络
  • 软考 系统架构设计师系列知识点之杂项集萃(169)
  • 大数据毕业设计选题推荐-基于大数据的人口普查收入数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 实验室网站制作数据交易网站源码
  • 【Kubernetes】(二十)Gateway
  • 爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南——企业级实时数据闭环构建
  • 桂林哪里可以做网站wordpress前台不显示
  • 模拟退火粒子群优化算法(SA-PSO):原理、应用与展望
  • 不用每次都改 `easysearch.yml` 也能改启动参数 —— 用 Docker 环境变量搞定一切
  • 三问岚图,计划登陆港股对消费者意味着什么?