# 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 安装 ```dockerfile # 指定 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` 数据库: ```bash 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 等多字节字符 | ```bash # 按照提示输入密码,直接输入正确密码并按下 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> ``` 退出数据库: ```bash # 在连接状态下,也就是在 mysql> 后面使用 exit 或 QUIT 命令退出MySql mysql> EXIT; # 退出会提示 Bye ``` ## 1.5. 查看数据库 ```bash show databases; ``` ## 1.6. 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: ```bash CREATE DATABASE ; ``` ## 1.7. 删除数据库 - 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 - 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。 ```bash # 直接删除数据库,不检查是否存在 DROP DATABASE ; # 如果数据库存在才执行删除操作,避免因为数据库不存在而引发错误。 DROP DATABASE [IF EXISTS] ; ``` >注意: 在执行删除数据库操作前,请确保你确实想要删除数据库及其所有数据,因为该操作是不可逆的。为了避免误操作,通常建议在执行删除之前备份数据库。 --- # 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. 安装 ```bash go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # MySQL 驱动 ``` ## 2.4. 连接 MySQL 数据库 ```go 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. 定义结构体模型 ```go type User struct { gorm.Model // 自动添加ID, CreatedAt, UpdatedAt, DeletedAt字段 Name string Email string `gorm:"unique"` } ``` ## 2.6. 自动迁移 ```go db.AutoMigrate(&User{}) ``` ## 2.7. CRUD 基本操作 ```go // 创建 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) ``` Loading... # 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 安装 ```dockerfile # 指定 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` 数据库: ```bash 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 等多字节字符 | ```bash # 按照提示输入密码,直接输入正确密码并按下 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> ``` 退出数据库: ```bash # 在连接状态下,也就是在 mysql> 后面使用 exit 或 QUIT 命令退出MySql mysql> EXIT; # 退出会提示 Bye ``` ## 1.5. 查看数据库 ```bash show databases; ``` ## 1.6. 创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: ```bash CREATE DATABASE <database_name>; ``` ## 1.7. 删除数据库 - 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 - 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。 ```bash # 直接删除数据库,不检查是否存在 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. 安装 ```bash go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # MySQL 驱动 ``` ## 2.4. 连接 MySQL 数据库 ```go 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. 定义结构体模型 ```go type User struct { gorm.Model // 自动添加ID, CreatedAt, UpdatedAt, DeletedAt字段 Name string Email string `gorm:"unique"` } ``` ## 2.6. 自动迁移 ```go db.AutoMigrate(&User{}) ``` ## 2.7. CRUD 基本操作 ```go // 创建 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) ``` Last modification:April 26, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 3 喜欢我的文章吗? 别忘了点赞或赞赏,让我知道创作的路上有你陪伴。