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)
Last modification:April 23, 2025
喜欢我的文章吗? 别忘了点赞或赞赏,让我知道创作的路上有你陪伴。