# MiniSQL **Repository Path**: freeman449/MiniSQL ## Basic Information - **Project Name**: MiniSQL - **Description**: 实现了一个精简的DBMS. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-05 - **Last Updated**: 2022-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MiniSQL 大二期间参与的一个项目,作为课程“数据库系统”的作业。此项目旨在实现一个精简的DBMS,具有的功能如下: 1. 建表、删表功能。数据类型支持int, float与char(n). 支持主码、unique约束。系统自动为主码建立索引。 2. 建立、删除索引功能。允许在主码、unique属性上建立B+树索引。 3. 选择、插入、删除记录功能。支持在where后的谓词中放入最多两个条件,用and或or连接。 4. 执行SQL脚本文件。 此项目由本人和三位同学合作开发。本人负责设计和开发Buffer Manager部分,并参与了Catalog Manager的实现。Buffer Manager连接上层模块与底层文件,其实现的功能有: 1. 根据需要返回块,如新块、有空位的块、指定偏移量的块等。 2. 为满足上述需求,需要实现从磁盘读取块和向磁盘写入块的功能。Buffer Manager与磁盘整块交互,块大小设计为8KB. 3. 实现了为块加锁的机制,防止正在使用的块被写回磁盘或交给其他模块。 4. 实现了替换算法,当内存中的块已经达到最大数量限制而仍需要创建新块时,选择最近最少使用的非脏块进行写回。 5. 此外,本实现中,freelist也由Buffer Manager管理。 由于时间仓促、水平有限,程序中存在错误在所难免,敬请大家指正。