30天学会Go--第9天 GO语言 MySQL学习与实践
文章目录
- [30天学会Go--第9天 GO语言 MySQL学习与实践](#30天学会Go--第9天 GO语言 MySQL学习与实践)
-
- 前言
- [一、MySQL 基础知识](#一、MySQL 基础知识)
-
- [1.1 MySQL 的核心特征](#1.1 MySQL 的核心特征)
- [1.2 MySQL 的常见使用情景](#1.2 MySQL 的常见使用情景)
- [二、安装 MySQL](#二、安装 MySQL)
-
- [2.1 Windows 安装](#2.1 Windows 安装)
- [2.2 macOS 安装](#2.2 macOS 安装)
- [2.3 Linux 安装](#2.3 Linux 安装)
- [三、MySQL 常用命令](#三、MySQL 常用命令)
-
- [3.1 数据库操作](#3.1 数据库操作)
- [3.2 表操作](#3.2 表操作)
- [3.3 数据操作](#3.3 数据操作)
- [四、在Go使用 `database/sql` 操作 MySQL](#四、在Go使用
database/sql
操作 MySQL) -
- [4.1 安装 MySQL 驱动](#4.1 安装 MySQL 驱动)
- [4.2 连接 MySQL](#4.2 连接 MySQL)
- [4.3 增删改查操作](#4.3 增删改查操作)
-
- [4.3.1 插入数据](#4.3.1 插入数据)
- [4.3.2 查询数据](#4.3.2 查询数据)
- [4.3.3 更新数据](#4.3.3 更新数据)
- [4.3.4 删除数据](#4.3.4 删除数据)
- [五、使用 GORM 来简化数据库操作](#五、使用 GORM 来简化数据库操作)
-
- [5.1 安装 GORM](#5.1 安装 GORM)
- [5.2 初始化 GORM](#5.2 初始化 GORM)
- [5.3 定义模型](#5.3 定义模型)
- [5.4 自动迁移](#5.4 自动迁移)
- [5.5 增删改查操作](#5.5 增删改查操作)
-
- [5.5.1 插入数据](#5.5.1 插入数据)
- [5.5.2 查询数据](#5.5.2 查询数据)
- [5.5.3 更新数据](#5.5.3 更新数据)
- [5.5.4 删除数据](#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 的核心特征:
- 开源免费:MySQL 是一个开源项目,开发者可以免费使用,同时也提供企业版以满足高级需求。
- 跨平台支持:支持多种操作系统,包括 Windows、Linux 和 macOS。
- 高性能:MySQL 能够处理高并发的读写操作,适合大规模应用场景。
- 支持事务:通过 InnoDB 存储引擎支持事务处理,提供 ACID 特性(原子性、一致性、隔离性、持久性)。
- 灵活的存储引擎:支持多种存储引擎(如 InnoDB、MyISAM 等),开发者可以根据需求选择合适的引擎。
- 丰富的生态系统:拥有强大的社区支持和丰富的第三方工具(如备份工具、监控工具等)。
1.2 MySQL 的常见使用情景
MySQL 因其高性能和灵活性,被广泛应用于多种场景中,以下是一些典型的使用情景:
- Web 应用开发:
- MySQL 是 LAMP(Linux、Apache、MySQL、PHP/Python/Perl)架构中的重要组成部分,广泛用于构建动态网站和内容管理系统(CMS)。
- 例如:WordPress、Joomla 等开源 CMS 都使用 MySQL 作为默认数据库。
- 电子商务平台:
- 适用于高并发的订单处理和商品管理系统。
- 例如:Shopify 和 Magento 等电商平台使用 MySQL 作为核心数据库。
- 数据仓库和分析:
- 通过 MySQL 的分区和索引功能,可以存储和分析大量数据。
- 例如:企业报表系统和数据分析工具。
- 移动应用后端:
- 作为移动应用的后端数据库,用于存储用户数据、消息和日志。
- 例如:社交媒体应用和即时通讯工具。
- 分布式系统:
- 配合主从复制和分布式架构,MySQL 能够支持大规模分布式系统。
- 例如:高可用的微服务架构。
二、安装 MySQL
2.1 Windows 安装
- 下载 MySQL 安装程序:https://dev.mysql.com/downloads/mysql/
- 按照安装向导完成安装。
- 配置环境变量(可选)。
推荐安装链接:MySQL超详细安装配置教程(亲测有效)
2.2 macOS 安装
使用 Homebrew 安装 MySQL:
bash
brew install mysql
brew services start mysql
2.3 Linux 安装
在 Ubuntu 系统中安装 MySQL:
bash
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
输入下面代码开启mysql服务:
bash
net start mysql
可以通过以下命令登录 MySQL:
bash
mysql -u root -p
三、MySQL 常用命令
以下是一些常用的 MySQL 命令,帮助你快速上手。
3.1 数据库操作
sql
-- 创建数据库
CREATE DATABASE go_demo;
-- 查看所有数据库
SHOW DATABASES;
-- 使用数据库
USE go_demo;
-- 删除数据库
DROP DATABASE go_demo;
3.2 表操作
sql
-- 创建表
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 数据操作
sql
-- 插入数据
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
驱动:
bash
go get -u github.com/go-sql-driver/mysql
4.2 连接 MySQL
以下是连接 MySQL 的示例代码:
go
package main
import (
"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 插入数据
go
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 查询数据
go
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 int
var name string
var age int
var email string
err := 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 更新数据
go
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 删除数据
go
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 驱动:
bash
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
5.2 初始化 GORM
以下是使用 GORM 连接 MySQL 的示例:
go
package main
import (
"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 定义模型
go
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Age int
Email string
}
5.4 自动迁移
go
db.AutoMigrate(&User{})
5.5 增删改查操作
5.5.1 插入数据
go
user := User{Name: "Alice", Age: 25, Email: "alice@example.com"}
db.Create(&user)
fmt.Println("Inserted record ID:", user.ID)
5.5.2 查询数据
go
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 更新数据
go
db.Model(&User{}).Where("name = ?", "Alice").Update("Age", 30)
5.5.4 删除数据
go
db.Delete(&User{}, 1) // 删除 ID 为 1 的用户
六、总结
通过章节学习,你已经掌握了以下内容:
- MySQL 的基础知识和常用命令。
- 使用
database/sql
操作 MySQL 的增删改查。 - 使用 GORM 简化数据库操作。