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

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 的核心特征:

  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 安装

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 的用户

六、总结

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

  1. MySQL 的基础知识和常用命令。
  2. 使用 database/sql 操作 MySQL 的增删改查。
  3. 使用 GORM 简化数据库操作。
相关推荐
froginwe113 分钟前
XML 查看器:深入理解与高效使用
开发语言
F20226974867 分钟前
使用 Python 爬取某网站简历模板(bs4/lxml+协程)
开发语言·python
一行玩python8 分钟前
Xerces-C,一个成熟的 C++ XML 解析库!
xml·c语言·开发语言·c++
我命由我1234537 分钟前
15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)
java·开发语言·网络·后端·tcp/ip·udp·java-ee
半夏知半秋1 小时前
unity打包流程整理-Windows/Mac/Linux平台
windows·笔记·学习·macos·unity·游戏引擎
yangpipi-1 小时前
数据结构(C语言版)-4.树与二叉树
c语言·开发语言·数据结构
Yaooooo81 小时前
【数学建模】利用Matlab绘制线图(1)
开发语言·数学建模·matlab
君逸~~1 小时前
RK3568(二)——字符设备驱动开发
linux·驱动开发·笔记·学习·rk3568
Octopus20771 小时前
【C++】AVL树
开发语言·c++·笔记·学习
爱吃香菜---www1 小时前
Scala隐式泛型
开发语言·后端·scala