这是一个作为C++课程项目开发的微型数据库管理系统(DBMS)。它旨在以一个简洁、现代化的C++实现,来模拟主流数据库的核心功能,包括数据定义(DDL)、数据操作(DML)、基于B+树的索引以及持久化存储。
本项目完全使用 C++23 标准开发,并遵循了现代化的设计原则,代码结构清晰,并通过了全面的自动化测试。
本数据库支持标准SQL的一个子集。所有表名和列名应使用全英文小写。
- 创建数据库:
CREATE DATABASE <database_name>;
- 删除数据库:
DROP DATABASE <database_name>;
- 切换数据库:
USE <database_name>;
- 创建表:
- 支持
int和string类型。 - 支持通过
primary关键字指定主键,这会自动为该列创建B+树索引。
CREATE TABLE <table_name> ( <column_name> <type> [primary], ... );
- 支持
- 删除表:
DROP TABLE <table_name>;
WHERE 子句中的条件操作符支持: =, <, >, <=, >=。
- 插入数据:
INSERT <table> [(col1, col2, ...)] VALUES (<value1>, <value2>, ...);
- 查询数据:
- 支持查询所有列 (
*) 或指定多列。
SELECT * FROM <table> [WHERE <condition>]; SELECT <col1>[, col2 ...] FROM <table> [WHERE <condition>];
- 支持查询所有列 (
- 更新数据:
UPDATE <table> SET <column_name> = <value> [WHERE <condition>];
- 删除数据:
DELETE <table> [WHERE <condition>];
项目使用CMake进行构建管理。请确保您的系统中已安装 g++ (版本14或更高) 和 cmake (版本3.16或更高)。
-
Release 版本
make -j
-
Debug 版本
make debug -j
这是最灵活的构建方式,允许您轻松选择 Debug 或 Release 模式。
便捷方式:切换工作目录为项目根目录(一定要!),运行bash run_cmake.sh获得Release版本
- 创建构建目录:
rm -rf build # 若还有build目录,建议这么做 mkdir -p build cd build
- 生成Makefile:
- 生成Release版本 (用于获取最佳性能):
cmake ..
- 生成Debug版本 (用于调试):
cmake -D CMAKE_BUILD_TYPE=Debug ..
- 生成Release版本 (用于获取最佳性能):
- 编译项目:
在
build目录下,运行make命令。编译成功后,将在make -j
build目录下生成两个可执行文件:mydb(主程序) 和mydb_tests(测试程序)。
直接运行在build目录下生成的可执行文件 mydb 来启动交互式命令行界面。
./build/mydb- 默认行为: 如果不指定任何参数,
mydb会在您当前的工作目录下寻找并使用一个名为data的目录来存储所有数据库文件。 - 使用
-d选项: 您可以通过-d选项来指定一个自定义的数据存储目录。./build/mydb -d /path/to/your/data_directory
我们为项目构建了一套包含27个测试用例的全面自动化测试套件,用于验证所有核心功能的正确性(新增列清单插入、多列SELECT、索引一致性用例)。
若您使用cmake构建,在build目录下,可使用ctest命令来运行所有测试。
cd build
ctest若您使用顶层Makefile通过make构建,在build目录下,可直接运行mydb_tests。
cd build
./mydb_tests您将会看到每个测试用例的执行过程和最终的测试总结报告 (下面展示cmake版本)。
Test project /path/to/project/build
Start 1: ddl_create_use_db
1/23 Test #1: ddl_create_use_db ................ Passed 0.02 sec
...
27/27 Test #23: dml_delete_ge .................... Passed 0.04 sec
100% tests passed, 0 tests failed out of 27
这证明了系统的核心功能稳定可靠。
当前递归下降解析器的简化 SQL 文法与词法说明,见 docs/parser_grammar.md。项目报告中也补充了最新的解析设计细节。
如果想要查阅更详尽的项目架构解析和源码实现分析,请查阅docs/项目报告.md。