一个用Java实现的简化版MySQL数据库引擎,模拟InnoDB存储引擎的基本功能。
Mini-MySQL是一个教学用的数据库引擎实现,旨在展示现代数据库系统的核心组件和工作原理。当前实现了第一阶段的功能:基础存储和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 compilemvn testmvn compile exec:java -Dexec.mainClass="com.minimysql.MiniMySQLDemo"-- 创建表
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类:负责页的读写、文件管理和并发控制
- 使用JSqlParser库进行SQL语句解析
- 支持基本的DDL(CREATE TABLE)和DQL(SELECT)语句
- 结构化的解析结果,便于执行器处理
- 模块化的执行器设计,每种操作对应一个执行器
- 当前实现了全表扫描执行器(SeqScanExecutor)
- 为未来扩展(索引扫描、连接等)预留了接口
- JSqlParser 5.0:SQL解析
- SLF4J + Logback:日志记录
- JUnit 5:单元测试
- B+树索引实现
- WHERE条件过滤
- 查询优化器基础
- MVCC多版本并发控制
- 事务日志(WAL)
- 锁管理器
- JOIN操作支持
- 聚合函数
- 子查询支持
这是一个教学项目,欢迎提出改进建议和bug报告。
MIT License