Skip to content

tyx3211/cpp_database

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyDatabase - 一个C++23微型数据库管理系统

这是一个作为C++课程项目开发的微型数据库管理系统(DBMS)。它旨在以一个简洁、现代化的C++实现,来模拟主流数据库的核心功能,包括数据定义(DDL)、数据操作(DML)、基于B+树的索引以及持久化存储。

本项目完全使用 C++23 标准开发,并遵循了现代化的设计原则,代码结构清晰,并通过了全面的自动化测试。

功能特性 (支持的SQL指令)

本数据库支持标准SQL的一个子集。所有表名和列名应使用全英文小写。

数据定义语言 (DDL)

  • 创建数据库:
    CREATE DATABASE <database_name>;
  • 删除数据库:
    DROP DATABASE <database_name>;
  • 切换数据库:
    USE <database_name>;
  • 创建表:
    • 支持 intstring 类型。
    • 支持通过 primary 关键字指定主键,这会自动为该列创建B+树索引。
    CREATE TABLE <table_name> (
        <column_name> <type> [primary],
        ...
    );
  • 删除表:
    DROP TABLE <table_name>;

数据操作语言 (DML)

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或更高)。

1. 使用make

  1. Release 版本

    make -j
  2. Debug 版本

    make debug -j

2. 推荐方式: 使用 CMake

这是最灵活的构建方式,允许您轻松选择 DebugRelease 模式。

便捷方式:切换工作目录为项目根目录(一定要!),运行bash run_cmake.sh获得Release版本

  1. 创建构建目录:
    rm -rf build # 若还有build目录,建议这么做
    mkdir -p build
    cd build
  2. 生成Makefile:
    • 生成Release版本 (用于获取最佳性能):
      cmake ..
    • 生成Debug版本 (用于调试):
      cmake -D CMAKE_BUILD_TYPE=Debug ..
  3. 编译项目: 在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

About

C++ simple db

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published