# dbms-server **Repository Path**: cms05/dbms-server ## Basic Information - **Project Name**: dbms-server - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-11 - **Last Updated**: 2025-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DBMS 数据库管理系统 一个基于 C++ 开发的完整数据库管理系统,采用客户端-服务器架构,支持标准 SQL 操作和多用户并发访问。 ## 📋 项目概述 本项目是一个功能完整的关系型数据库管理系统,包含以下核心特性: - **客户端-服务器架构**:支持多客户端并发连接 - **SQL 解析引擎**:基于 Flex/Bison 的完整 SQL 解析器 - **存储引擎**:自主实现的页式存储管理和缓冲池 - **索引系统**:支持 B+ 树索引和主键约束 - **事务处理**:基本的事务管理和并发控制 - **用户认证**:多用户登录和权限管理 - **测试框架**:完整的自动化测试脚本系统 ## 🏗️ 系统架构 ``` ┌─────────────────┐ TCP/IP ┌─────────────────┐ │ DBMS Client │◄────────────►│ DBMS Server │ │ │ Socket │ │ │ • 用户界面 │ │ • SQL 解析器 │ │ • 网络通信 │ │ • 查询执行器 │ │ • 脚本执行 │ │ • 存储引擎 │ └─────────────────┘ │ • 索引管理器 │ │ • 缓冲管理器 │ │ • 用户管理 │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ 文件系统 │ │ • 数据文件 │ │ • 索引文件 │ │ • 日志文件 │ └─────────────────┘ ``` ## 🚀 快速开始 ### 环境要求 - **操作系统**:Windows 10/11 - **开发环境**:Visual Studio 2019/2022 - **编译器**:MSVC v143 工具集 - **网络**:支持 TCP/IP 协议栈 ### 编译构建 1. **克隆项目** ```bash git clone cd f5 ``` 2. **编译服务器端** ```bash cd dbms-server # 使用 Visual Studio 打开 DBMS_Server.sln # 或使用 MSBuild 命令行编译 msbuild DBMS_Server.sln /p:Configuration=Debug /p:Platform=x64 ``` 3. **编译客户端** ```bash cd dbms-client # 使用 Visual Studio 打开 DBMS_Client.sln # 或使用 MSBuild 命令行编译 msbuild DBMS_Client.sln /p:Configuration=Debug /p:Platform=x64 ``` ### 运行系统 #### 方法1:使用自动化测试脚本(推荐) ```bash # 运行主测试脚本(包含完整测试流程) database_test_script.bat # 或运行轻量级客户端脚本 client_wrapper.bat # 或运行参数验证测试 test_client_args.bat ``` #### 方法2:手动启动 1. **启动服务器** ```bash cd dbms-server/x64/Debug DBMS_Server.exe ``` 服务器将在端口 8080 上监听连接。 2. **启动客户端** ```bash cd dbms-client/x64/Debug # 交互模式 DBMS_Client.exe # 脚本模式 DBMS_Client.exe --script "path/to/script.sql" ``` ## 💾 支持的 SQL 功能 ### 数据定义语言 (DDL) ```sql -- 创建数据库模式 CREATE SCHEMA database_name; -- 使用数据库 USE database_name; -- 创建表 CREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype, column3 datatype ); -- 创建索引 CREATE INDEX index_name ON table_name(column_name); -- 删除表 DROP TABLE table_name; ``` ### 数据操作语言 (DML) ```sql -- 插入数据 INSERT INTO table_name VALUES (value1, value2, value3); INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 查询数据 SELECT * FROM table_name; SELECT column1, column2 FROM table_name WHERE condition; SELECT * FROM table_name ORDER BY column1 ASC/DESC; -- 更新数据 UPDATE table_name SET column1 = value1 WHERE condition; -- 删除数据 DELETE FROM table_name WHERE condition; ``` ### 支持的数据类型 - **整数类型**:`INT`, `INTEGER` - **浮点类型**:`FLOAT`, `DOUBLE` - **字符类型**:`VARCHAR(n)`, `CHAR(n)`, `TEXT` - **布尔类型**:`BOOL`, `BOOLEAN` - **日期时间**:`DATE`, `TIME`, `TIMESTAMP` ### 查询功能 - **基本查询**:SELECT, FROM, WHERE - **排序**:ORDER BY (ASC/DESC) - **聚合函数**:COUNT, SUM, AVG, MAX, MIN - **条件操作**:AND, OR, NOT, LIKE, IN, BETWEEN - **连接查询**:INNER JOIN, LEFT JOIN, RIGHT JOIN - **子查询**:嵌套查询支持 ## 🧪 测试系统 项目包含完整的自动化测试框架,支持多种测试模式: ### 测试脚本说明 | 脚本文件 | 功能描述 | |---------|----------| | `database_test_script.bat` | 主控制脚本,提供完整测试流程 | | `client_wrapper.bat` | 轻量级客户端包装器,专注脚本执行 | | `test_client_args.bat` | 参数验证工具,用于开发调试 | | `test_script.sql` | 标准测试 SQL 脚本,包含各种测试用例 | ### 测试用例类型 1. **功能测试** - 建表、插入、查询、更新、删除操作 - 索引创建和使用 - 数据类型验证 2. **错误处理测试** - 语法错误检测 - 约束违反处理 - 类型不匹配检测 3. **并发测试** - 多客户端连接 - 事务隔离 - 死锁检测 ### 运行测试 ```bash # 运行完整测试套件 database_test_script.bat # 运行特定 SQL 脚本 client_wrapper.bat # 验证客户端参数处理 test_client_args.bat ``` ## 📁 项目结构 ``` f5/ ├── dbms-server/ # 服务器端代码 │ ├── DBMS_Server/ │ │ ├── main.cpp # 服务器主程序 │ │ ├── DB.h/cpp # 数据库核心类 │ │ ├── serversocket.h/cpp # 网络服务器实现 │ │ ├── Dict.h/cpp # 数据字典管理 │ │ ├── buffer.h/cpp # 缓冲池管理 │ │ ├── IdxMgr.h/cpp # 索引管理器 │ │ ├── parser/ # SQL 解析器 │ │ │ ├── flex_lexer.l # 词法分析器 │ │ │ ├── bison_parser.y # 语法分析器 │ │ │ └── sql_keywords.txt # SQL 关键字定义 │ │ ├── sql/ # SQL 语句处理 │ │ │ ├── statements.h/cpp # 语句执行引擎 │ │ │ ├── statCreate.h # CREATE 语句处理 │ │ │ ├── statSelect.h # SELECT 语句处理 │ │ │ ├── statInsert.h # INSERT 语句处理 │ │ │ └── statUpdate.h # UPDATE 语句处理 │ │ └── PlanNode.h/cpp # 查询计划节点 │ └── DBMS_Server.sln # Visual Studio 解决方案 ├── dbms-client/ # 客户端代码 │ ├── DBMS_Client/ │ │ ├── main.cpp # 客户端主程序 │ │ ├── mysocket.h/cpp # 网络通信模块 │ │ └── global.h # 全局定义 │ └── DBMS_Client.sln # Visual Studio 解决方案 ├── database_test_script.bat # 主测试脚本 ├── client_wrapper.bat # 客户端包装脚本 ├── test_client_args.bat # 参数测试脚本 ├── test_script.sql # 标准测试 SQL 脚本 ├── README_测试脚本使用说明.md # 测试脚本详细说明 └── README.md # 项目主文档(本文件) ``` ## 🔧 核心组件 ### 服务器端组件 1. **网络服务器** (`serversocket.cpp`) - TCP/IP 连接管理 - 多线程客户端处理 - 用户认证和会话管理 2. **SQL 解析器** (`parser/`) - 基于 Flex/Bison 的词法语法分析 - 支持完整的 SQL 语法 - 抽象语法树生成 3. **查询执行器** (`sql/statements.cpp`) - 火山模型查询执行 - 算子实现(扫描、过滤、投影、连接) - 查询优化和计划生成 4. **存储引擎** (`buffer.cpp`, `page.cpp`) - 页式存储管理 - LRU 缓冲池 - 文件系统接口 5. **索引管理** (`IdxMgr.cpp`, `BPlus_tree.cpp`) - B+ 树索引实现 - 主键和唯一约束 - 索引维护和查询优化 6. **数据字典** (`Dict.cpp`) - 元数据管理 - 表结构存储 - 用户权限管理 ### 客户端组件 1. **网络通信** (`mysocket.cpp`) - TCP 客户端实现 - 消息序列化/反序列化 - 连接管理和错误处理 2. **用户界面** (`main.cpp`) - 交互式命令行界面 - 脚本执行模式 - UTF-8 编码支持 ## 🔒 安全特性 - **用户认证**:用户名/密码验证 - **权限控制**:基于用户的访问控制 - **SQL 注入防护**:参数化查询支持 - **连接限制**:最大并发连接数控制 - **错误处理**:完善的异常处理机制 ## 📊 性能特性 - **缓冲池管理**:LRU 替换策略,减少磁盘 I/O - **索引优化**:B+ 树索引加速查询 - **并发控制**:多线程处理,支持并发访问 - **查询优化**:基于代价的查询计划选择 - **内存管理**:智能内存分配和回收 ## 🐛 故障排除 ### 常见问题 1. **服务器启动失败** - 检查端口 8080 是否被占用 - 确认防火墙设置允许程序访问网络 - 验证可执行文件是否存在 2. **客户端连接失败** - 确认服务器已启动并监听 - 检查网络连接和 IP 地址 - 验证客户端和服务器版本兼容性 3. **SQL 执行错误** - 检查 SQL 语法是否正确 - 确认表和列名是否存在 - 验证数据类型是否匹配 4. **编译错误** - 确认 Visual Studio 版本和工具集 - 检查依赖库是否正确链接 - 验证项目配置和平台设置 ### 调试技巧 - 启用详细日志输出 - 使用 Visual Studio 调试器 - 检查缓冲池统计信息 - 分析查询执行计划 ## 🙏 致谢 感谢所有为本项目做出贡献的开发者和测试人员。 --- **注意**:本项目仅用于学习和研究目的,不建议在生产环境中使用。