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

30天学会Go--第9天 GO语言 Mysql 学习与实践

30天学会Go–第9天 GO语言 MySQL学习与实践

文章目录

  • 30天学会Go--第9天 GO语言 MySQL学习与实践
    • 前言
    • 一、MySQL 基础知识
      • 1.1 MySQL 的核心特征
      • 1.2 MySQL 的常见使用情景
    • 二、安装 MySQL
      • 2.1 Windows 安装
      • 2.2 macOS 安装
      • 2.3 Linux 安装
    • 三、MySQL 常用命令
      • 3.1 数据库操作
      • 3.2 表操作
      • 3.3 数据操作
    • 四、在Go使用 `database/sql` 操作 MySQL
      • 4.1 安装 MySQL 驱动
      • 4.2 连接 MySQL
      • 4.3 增删改查操作
        • 4.3.1 插入数据
        • 4.3.2 查询数据
        • 4.3.3 更新数据
        • 4.3.4 删除数据
    • 五、使用 GORM 来简化数据库操作
      • 5.1 安装 GORM
      • 5.2 初始化 GORM
      • 5.3 定义模型
      • 5.4 自动迁移
      • 5.5 增删改查操作
        • 5.5.1 插入数据
        • 5.5.2 查询数据
        • 5.5.3 更新数据
        • 5.5.4 删除数据
    • 六、总结

前言

在后端开发中,数据库是不可或缺的组成部分,而 MySQL 是最流行的关系型数据库之一。Go 语言为操作 MySQL 提供了多种方式,包括标准库 database/sql 和更高级的 ORM 框架(如 GORM)。本章将带你学习如何在 Go 中使用 MySQL,掌握从基础到高级的数据库操作技巧。

MySQL中文官方文档指南:MySQL 中文文档 | MySQL 中文网

MySQL的中文官方文档学习笔记很全,推荐去官网学习

非关系数据库(nosql)Redis传送点:30天学会Go–第7天 GO语言 Redis 学习与实践(改)-CSDN博客


一、MySQL 基础知识

1.1 MySQL 的核心特征

MySQL 是一个开源的关系型数据库管理系统(RDBMS),因其高性能、稳定性和易用性而广泛应用。以下是 MySQL 的核心特征:

  1. 开源免费:MySQL 是一个开源项目,开发者可以免费使用,同时也提供企业版以满足高级需求。
  2. 跨平台支持:支持多种操作系统,包括 Windows、Linux 和 macOS。
  3. 高性能:MySQL 能够处理高并发的读写操作,适合大规模应用场景。
  4. 支持事务:通过 InnoDB 存储引擎支持事务处理,提供 ACID 特性(原子性、一致性、隔离性、持久性)。
  5. 灵活的存储引擎:支持多种存储引擎(如 InnoDB、MyISAM 等),开发者可以根据需求选择合适的引擎。
  6. 丰富的生态系统:拥有强大的社区支持和丰富的第三方工具(如备份工具、监控工具等)。

1.2 MySQL 的常见使用情景

MySQL 因其高性能和灵活性,被广泛应用于多种场景中,以下是一些典型的使用情景:

  1. Web 应用开发:
    • MySQL 是 LAMP(Linux、Apache、MySQL、PHP/Python/Perl)架构中的重要组成部分,广泛用于构建动态网站和内容管理系统(CMS)。
    • 例如:WordPress、Joomla 等开源 CMS 都使用 MySQL 作为默认数据库。
  2. 电子商务平台:
    • 适用于高并发的订单处理和商品管理系统。
    • 例如:Shopify 和 Magento 等电商平台使用 MySQL 作为核心数据库。
  3. 数据仓库和分析:
    • 通过 MySQL 的分区和索引功能,可以存储和分析大量数据。
    • 例如:企业报表系统和数据分析工具。
  4. 移动应用后端:
    • 作为移动应用的后端数据库,用于存储用户数据、消息和日志。
    • 例如:社交媒体应用和即时通讯工具。
  5. 分布式系统:
    • 配合主从复制和分布式架构,MySQL 能够支持大规模分布式系统。
    • 例如:高可用的微服务架构。

二、安装 MySQL

2.1 Windows 安装

  • 下载 MySQL 安装程序:https://dev.mysql.com/downloads/mysql/
  • 按照安装向导完成安装。
  • 配置环境变量(可选)。
    推荐安装链接:MySQL超详细安装配置教程(亲测有效)

2.2 macOS 安装

使用 Homebrew 安装 MySQL:

brew install mysql
brew services start mysql

2.3 Linux 安装

在 Ubuntu 系统中安装 MySQL:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

输入下面代码开启mysql服务:

net start mysql

可以通过以下命令登录 MySQL:

mysql -u root -p

三、MySQL 常用命令

以下是一些常用的 MySQL 命令,帮助你快速上手。

3.1 数据库操作

-- 创建数据库
CREATE DATABASE go_demo;-- 查看所有数据库
SHOW DATABASES;-- 使用数据库
USE go_demo;-- 删除数据库
DROP DATABASE go_demo;

3.2 表操作

-- 创建表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT NOT NULL,email VARCHAR(100) NOT NULL
);-- 查看所有表
SHOW TABLES;-- 查看表结构
DESCRIBE users;-- 删除表
DROP TABLE users;

3.3 数据操作

-- 插入数据
INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');-- 查询数据
SELECT * FROM users;-- 更新数据
UPDATE users SET age = 30 WHERE name = 'Alice';-- 删除数据
DELETE FROM users WHERE name = 'Alice';

四、在Go使用 database/sql 操作 MySQL

Go 标准库 database/sql 提供了对数据库的基本操作接口。以下是使用 database/sql 操作 MySQL 的完整实践。

4.1 安装 MySQL 驱动

Go 的标准库需要驱动来支持 MySQL,我们使用 go-sql-driver/mysql 驱动:

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

4.2 连接 MySQL

以下是连接 MySQL 的示例代码:

package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动
)func main() {// 数据库连接信息dsn := "root:password@tcp(127.0.0.1:3306)/go_demo" // 替换为你的 MySQL 用户名和密码// 打开数据库连接db, err := sql.Open("mysql", dsn)if err != nil {log.Fatal("Failed to connect to database:", err)}defer db.Close()// 测试数据库连接err = db.Ping()if err != nil {log.Fatal("Failed to ping database:", err)}fmt.Println("Successfully connected to MySQL!")
}

4.3 增删改查操作

4.3.1 插入数据
result, err := db.Exec("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", "Bob", 28, "bob@example.com")
if err != nil {log.Fatal("Failed to insert data:", err)
}
id, _ := result.LastInsertId()
fmt.Println("Inserted record ID:", id)
4.3.2 查询数据
rows, err := db.Query("SELECT id, name, age, email FROM users")
if err != nil {log.Fatal("Failed to query data:", err)
}
defer rows.Close()for rows.Next() {var id intvar name stringvar age intvar email stringerr := rows.Scan(&id, &name, &age, &email)if err != nil {log.Fatal("Failed to scan row:", err)}fmt.Printf("User: ID=%d, Name=%s, Age=%d, Email=%s\n", id, name, age, email)
}
4.3.3 更新数据
result, err := db.Exec("UPDATE users SET age = ? WHERE name = ?", 35, "Bob")
if err != nil {log.Fatal("Failed to update data:", err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Println("Number of rows updated:", rowsAffected)
4.3.4 删除数据
result, err := db.Exec("DELETE FROM users WHERE name = ?", "Bob")
if err != nil {log.Fatal("Failed to delete data:", err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Println("Number of rows deleted:", rowsAffected)

五、使用 GORM 来简化数据库操作

database/sql 提供了基础的数据库操作接口,但操作较为繁琐。GORM 是 Go 语言中最流行的 ORM 框架,能够大幅简化数据库操作。

5.1 安装 GORM

安装 GORM 和 MySQL 驱动:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

5.2 初始化 GORM

以下是使用 GORM 连接 MySQL 的示例:

package mainimport ("fmt""log""gorm.io/driver/mysql""gorm.io/gorm"
)func main() {// 数据库连接信息dsn := "root:password@tcp(127.0.0.1:3306)/go_demo?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {log.Fatal("Failed to connect to database:", err)}fmt.Println("Successfully connected to MySQL with GORM!")
}

5.3 定义模型

type User struct {ID    uint   `gorm:"primaryKey"`Name  stringAge   intEmail string
}

5.4 自动迁移

db.AutoMigrate(&User{})

5.5 增删改查操作

5.5.1 插入数据
user := User{Name: "Alice", Age: 25, Email: "alice@example.com"}
db.Create(&user)
fmt.Println("Inserted record ID:", user.ID)
5.5.2 查询数据
var users []User
db.Find(&users)
for _, user := range users {fmt.Printf("User: ID=%d, Name=%s, Age=%d, Email=%s\n", user.ID, user.Name, user.Age, user.Email)
}
5.5.3 更新数据
db.Model(&User{}).Where("name = ?", "Alice").Update("Age", 30)
5.5.4 删除数据
db.Delete(&User{}, 1) // 删除 ID 为 1 的用户

六、总结

通过章节学习,你已经掌握了以下内容:

  1. MySQL 的基础知识和常用命令。
  2. 使用 database/sql 操作 MySQL 的增删改查。
  3. 使用 GORM 简化数据库操作。
http://www.lryc.cn/news/499914.html

相关文章:

  • 跟李笑来学美式俚语(Most Common American Idioms): Part 54
  • Angular由一个bug说起之十一:排序之后无法展开 Row
  • 使用 Flutter 进行移动应用开发:深入探索
  • 2024年天津市职业院校技能大赛高职组 “信息安全管理与评估”样题第三阶段
  • docker批量创建cloudstack虚拟主机脚本
  • npm发布插件到私有仓库保姆级教程
  • WinRAR V7.10纯净体验
  • scss文件内引入其他scss文件报错
  • 1-12 GD32基于定时器输入捕获
  • 前端基础的讲解-JS(22)
  • Minecraft-Datapack数据包开发3-进度与成就
  • 泷羽sec-shell编程(3)
  • 如何解决压测过程中JMeter堆内存溢出问题
  • 爬虫项目基础知识详解
  • uniapp 微信小程序webview 和 h5数据通信
  • SSM01-MyBatis框架(一文学会MyBatis)
  • 【PlantUML系列】状态图(六)
  • JS中重排和重绘的区别是什么?
  • 工业—使用Flink处理Kafka中的数据_ProduceRecord2
  • C 库中的断言与 FreeRTOS 中的 trace 宏
  • JAVAWeb中的Servlet学习
  • docker安装ddns-go(外网连接局域网)
  • 时间复杂度度详解
  • 如何处理和优化大文件上传和下载
  • QT 线程锁
  • 光猫开DMZ教程
  • 分区之间的一种度量方法-覆盖度量(Covering Metric)
  • cocos creator接入字节跳动抖音小游戏JSAPI敏感词检测(进行文字输入,但输入敏感词后没有替换为*号)
  • 13.Java IO 流(文件流、字符流、字符处理流、字节处理流、对象处理流、标准流、转换流、打印流、Properties 配置文件、其他流)
  • 掌握 DOM 操作:让你的网页动起来