Skip to content

JustCod101/mini-mysql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini-MySQL 数据库引擎

一个用Java实现的简化版MySQL数据库引擎,模拟InnoDB存储引擎的基本功能。

项目概述

Mini-MySQL是一个教学用的数据库引擎实现,旨在展示现代数据库系统的核心组件和工作原理。当前实现了第一阶段的功能:基础存储和SQL解析。

功能特性

第一阶段 - 基础存储与SQL解析 ✅

  • 页式存储管理器:模拟InnoDB的16KB页结构
  • SQL解析器:支持基本的CREATE TABLE、INSERT、SELECT语句
  • 执行器框架:支持全表扫描查询
  • 数据类型支持:INTEGER、LONG、STRING、BOOLEAN
  • 磁盘持久化:数据存储在.db文件中

项目结构

src/main/java/com/minimysql/
├── MiniMySQLEngine.java          # 主引擎类
├── MiniMySQLDemo.java            # 命令行演示程序
├── storage/                      # 存储层
│   ├── Page.java                # 页管理
│   ├── Record.java              # 记录结构
│   └── DiskManager.java         # 磁盘I/O管理
├── parser/                       # SQL解析层
│   ├── SqlParser.java           # SQL解析器
│   ├── ParsedStatement.java     # 解析结果基类
│   ├── SelectStatement.java     # SELECT语句
│   ├── InsertStatement.java     # INSERT语句
│   ├── CreateTableStatement.java # CREATE TABLE语句
│   ├── ColumnDefinition.java    # 列定义
│   └── SqlParseException.java   # 解析异常
└── executor/                     # 执行层
    ├── Executor.java            # 执行器基类
    ├── SeqScanExecutor.java     # 全表扫描执行器
    ├── InsertExecutor.java      # 插入执行器
    ├── CreateTableExecutor.java # 建表执行器
    └── ExecutorException.java   # 执行异常

快速开始

编译项目

mvn compile

运行测试

mvn test

运行演示程序

mvn compile exec:java -Dexec.mainClass="com.minimysql.MiniMySQLDemo"

支持的SQL命令

-- 创建表
CREATE TABLE users

-- 查询数据(目前只支持全表扫描)
SELECT * FROM users

-- 注意:INSERT语句的解析已实现,但需要通过程序API插入数据

演示示例

运行演示程序后,你会看到:

=== Mini-MySQL Database Engine Demo ===
阶段一实现:基础存储与SQL解析
支持的操作:CREATE TABLE, INSERT (简化), SELECT * FROM table

=== 演示基本功能 ===
1. 创建用户表...
2. 插入测试数据...
   插入记录: Record{INTEGER:1, STRING:Alice, INTEGER:25}
   插入记录: Record{INTEGER:2, STRING:Bob, INTEGER:30}
   插入记录: Record{INTEGER:3, STRING:Charlie, INTEGER:28}
3. 查询所有用户...
查询结果 (3 条记录):
+---------+----------+-----+
| ID      | Name     | Age |
+---------+----------+-----+
| 1       | Alice    | 25  |
| 2       | Bob      | 30  |
| 3       | Charlie  | 28  |
+---------+----------+-----+

mini-mysql> 

技术实现

存储层设计

  • Page类:16KB固定大小页,包含页头信息和记录数据
  • Record类:支持多种数据类型的记录结构,包含序列化/反序列化功能
  • DiskManager类:负责页的读写、文件管理和并发控制

SQL解析

  • 使用JSqlParser库进行SQL语句解析
  • 支持基本的DDL(CREATE TABLE)和DQL(SELECT)语句
  • 结构化的解析结果,便于执行器处理

执行器架构

  • 模块化的执行器设计,每种操作对应一个执行器
  • 当前实现了全表扫描执行器(SeqScanExecutor)
  • 为未来扩展(索引扫描、连接等)预留了接口

依赖项

  • JSqlParser 5.0:SQL解析
  • SLF4J + Logback:日志记录
  • JUnit 5:单元测试

开发计划

第二阶段 - 索引与查询优化(计划中)

  • B+树索引实现
  • WHERE条件过滤
  • 查询优化器基础

第三阶段 - 事务与并发控制(计划中)

  • MVCC多版本并发控制
  • 事务日志(WAL)
  • 锁管理器

第四阶段 - 高级特性(计划中)

  • JOIN操作支持
  • 聚合函数
  • 子查询支持

贡献

这是一个教学项目,欢迎提出改进建议和bug报告。

许可证

MIT License

About

Mini-MySQL是一个教学用的数据库引擎实现,旨在展示现代数据库系统的核心组件和工作原理。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages