1. MySql
1.1. 什么是 MySql
- MySQL 是一个非常流行的 关系型数据库管理系统(Relational Database Management System,简称RDBMS),常用于网站、应用程序和系统的后端,用于存储和管理结构化数据。
- 支持 SQL 语言,并以高性能、稳定性和开源著称。
- 下载地址:https://dev.mysql.com/downloads/mysql
1.2. MySQL 的核心特点
特点 | 描述 |
---|---|
🆓 开源免费 | 由 Oracle 维护,但基础功能开源,适合个人和企业项目 |
🧮 使用 SQL | 通过结构化查询语言(SQL)进行数据操作,如增删查改 |
📊 关系型数据库 | 数据以表格形式组织,可建立表与表之间的关系(如一对多、多对多) |
🚀 高性能 | 适用于中小型到大型应用,查询优化功能丰富 |
🧩 支持多种引擎 | 默认支持 InnoDB(事务型)和 MyISAM(非事务型)等存储引擎 |
🔒 安全机制 | 支持用户权限控制、加密通信、SSL 安全连接等 |
📦 易于部署 | 安装简单,广泛用于 LAMP(Linux, Apache, MySQL, PHP)架构中 |
1.3. Docker Compose MySQL 安装
# 指定 Docker Compose 文件版本
version: '3.3'
# 定义服务列表
services:
# MySQL 数据库服务
mysql-db:
# 指定容器的名称(在 Docker 中显示的名称)
container_name: Mysql
# 使用的镜像名称及版本标签(推荐使用 8.0 及以上版本)
image: mysql:8.0
# 端口映射配置(格式:主机端口:容器端口)
# 这里将容器内的 3306 端口映射到主机的 13306 端口
ports:
- "13306:3306"
# 容器重启策略:始终自动重启(无论退出状态如何)
restart: always
# 日志配置
logging:
# 使用 JSON 文件格式记录日志
driver: 'json-file'
options:
# 单个日志文件最大大小限制为 5GB
max-size: '5g'
# 环境变量配置(用于 MySQL 容器初始化)
environment:
# 设置 MySQL root 用户的密码(生产环境请使用更复杂的密码)
MYSQL_ROOT_PASSWORD: 12345678
# 数据卷挂载配置
volumes:
# 将 MySQL 数据目录挂载到宿主机的 ./data 目录
# 这样数据可以持久化,即使容器删除数据也不会丢失
- "./data:/var/lib/mysql"
# 将 MySQL 配置文件目录挂载到宿主机的 ./config 目录
# 可以在此目录添加自定义的 MySQL 配置文件(如 my.cnf)
- "./config:/etc/mysql/conf.d"
1.4. 连接&退出
控制台输入下面代码进行连接 MySql
数据库:
mysql -h localhost -P 13306 -u root -p --default-character-set=utf8mb4
参数 | 含义说明 |
---|---|
mysql | 启动 MySQL 客户端命令行工具 |
-h localhost | 指定连接的主机地址为 localhost(本地) |
-P 13306 | 指定连接的端口号为 13306(映射端口,默认3306) |
-u root | 使用用户名 root 进行连接 |
-p | 提示用户输入密码(实际密码不会写在命令中) |
--default-character-set=utf8mb4 | 设置默认字符集为 utf8mb4,支持 Emoji 等多字节字符 |
# 按照提示输入密码,直接输入正确密码并按下 Enter 键,这里不会显示输入内容。
Enter password:
# 登录成功输出结果如下:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.42 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
退出数据库:
# 在连接状态下,也就是在 mysql> 后面使用 exit 或 QUIT 命令退出MySql
mysql> EXIT;
# 退出会提示
Bye
1.5. 查看数据库
show databases;
1.6. 创建数据库
我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下:
CREATE DATABASE <database_name>;
1.7. 删除数据库
- 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。
- 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。
# 直接删除数据库,不检查是否存在
DROP DATABASE <database_name>;
# 如果数据库存在才执行删除操作,避免因为数据库不存在而引发错误。
DROP DATABASE [IF EXISTS] <database_name>;
注意: 在执行删除数据库操作前,请确保你确实想要删除数据库及其所有数据,因为该操作是不可逆的。为了避免误操作,通常建议在执行删除之前备份数据库。
2. GORM
2.1. 什么是 GORM
- GORM 是 Go 语言中最常用的 ORM(对象关系映射)框架,用于将 Go 语言中的结构体与数据库中的表自动映射,让你用面向对象的方式来操作关系型数据库(如 MySQL、PostgreSQL、SQLite 等)。
- GORM 可以让你用 Go 代码直接操作数据库,无需手写繁琐的 SQL。
- 文档地址:https://gorm.io/zh_CN/docs/index.html
- 文档镜像及更多实例:https://learnku.com/docs/gorm/v2/index/9728
2.2. GORM 核心特点
功能 | 描述 |
---|---|
📦 数据表映射 | 结构体自动对应数据库表,字段自动映射到列 |
🧩 自动迁移 | 自动创建、更新数据库表结构(无需写建表 SQL) |
🔄 增删改查 | 简洁的链式 API 实现 CRUD 操作 |
🔗 支持关联关系 | 一对一、一对多、多对多轻松管理 |
🔒 事务支持 | 简洁封装事务处理逻辑,支持嵌套 |
🛡️ 钩子函数 | 支持生命周期钩子,如 BeforeSave、AfterCreate 等 |
🧪 数据验证/约束 | 支持字段标签定义唯一性、非空、默认值等约束 |
2.3. 安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql # MySQL 驱动
2.4. 连接 MySQL 数据库
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
}
2.5. 定义结构体模型
type User struct {
gorm.Model // 自动添加ID, CreatedAt, UpdatedAt, DeletedAt字段
Name string
Email string `gorm:"unique"`
}
2.6. 自动迁移
db.AutoMigrate(&User{})
2.7. CRUD 基本操作
// 创建
user := User{Name: "Alice", Email: "alice@example.com"}
db.Create(&user)
// 查询
var user User
db.First(&user, "email = ?", "alice@example.com")
// 更新
db.Model(&user).Update("Name", "Alice Updated")
// 删除
db.Delete(&user)