# NEDB - NOT ENOUGH DATABASE
### An Ultra Light DataBase Project
![avatar](https://badgen.net/badge/Language/C++11/orange)
![stars](https://badgen.net/badge/Dev%20Env./Linux/green)
## Introduction
**NEDB 是基于 `C++` 的简单数据库. 项目参考 `SQLite` 底层原理与 `InnoDB` 引擎, 实现数据库[增-删-查-改]的基本操作, 并提供控制台界面与外部接口.**
**NEDB 是一个大模拟,不涉及sql语法分析,为上层课设项目 [Tiny And Pretty](https://github.com/BUPT-CS-Assignment/TinyAndPretty.git)搭建**
## Schedule
### 项目进度 **`2022.6.9`**
- [x] 基本表结构
- [x] 终端控制
- [x] 命令解析器
- [x] 命令执行器
- [x] B+Tree
- [x] 数据表创建
- [x] 数据插入
- [x] 数据查找
- [x] 数据修改
- [x] 数据删除
- [ ] ~~非主键索引~~
- [x] 文件存取
- [x] 异常
- [x] 外部接口
- [x] 任务锁
---
## Instruction
- ### Basic
作为超轻量数据库, **NEDB** 支持以下五种数据类型
|名称|对应 `C++` 数据类型|占用空间|默认值|
|:---:|:---:|:---:|:---:|
|int |**`int`**|4|0|
|int64|**`long long`**|8|0|
|real|**`double`**|8|0.0|
|text|**`char[32]`**|32|NULL|
|longtext|**`char[255]`**|255|NULL|
- ### Console
##### **NEDB** 包含以 **`.`** 开头的元命令 AND 以 **`;`** 结尾的普通操作命令
**NEDB** 支持的元命令如下, 注意严格小写
|命令|参数|效果|
|:---:|:---:|:---:|
|.help|-|显示命令帮助信息|
|.debug|调试等级|设置调试等级(参数为空则显示当前调试等级)|
|.dir|-|显示当前数据加载目录|
|.setdir|文件夹路径(-d:default)|设置数据加载目录|
|.dirinit|-|自动检查及创建当前加载目录|
|.open|数据表绝对路径(无后缀)|从相应目录加载相应数据表至内存|
|.mount|数据表名称|从当前加载目录加载相应名称数据表|
|.mountall|-|从数据加载目录加载所有数据表|
|.unmount|数据表名称|取消挂挂载相应数据表|
|.size|-|显示当前单数据页最大字节数|
|.setsize|数据页字节数(-d:default)|设置单数据页最大字节数|
|.exit|-|退出 **`NEDB`** 控制台|
**NEDB** 支持的操作命令如下, 注意严格小写
- ##### 创建数据表
```
create table 'table_name' (
'Parm_Name' 'Parm_Type',
...
);
```
注意事项 :
1. **NEDB** 默认输入的首个元素为主键, 可以在相应元素类型后添加 `key`关键字以指定主键.
2. **NEDB** 不支持将 `longtext` 类型的数据设置为主键.
3. 创建指令将搜索当前目录下同一名称的数据表, 无论其是否加载入数据库内存, 若同名数据表存在则创建失败.
操作示例 :
```
/*
* 创建名为 'new_table' 的数据表
* 包含'ID', 'NAME', 'SCORE' 三个字段
* 指定 'ID' 字段为主键
*/
create table new_table (
ID int key,
NAME text,
SCORE real
);
```
- ##### 插入数据
```
insert into 'table_name' ('parm_name_1', ...) values ('value_1', ...);
```
注意事项 :
1. **NEDB** 要求插入数据必须指定主键, 因此在前一参数表中需包含主键字段.
2. 若省略指定'parm_name'字段, 即
```
insert into 'table_name' values ('value_1', ...);
```
此时参数个数应与表格字段个数相同, **NEDB** 会按照表格字段顺序进行填充.
3. 当指定字段不存在, 或主键值重复时, **NEDB** 会返回错误信息.
操作示例 :
```
/*
* 在 'new_table' 数据表中插入数据行
* 'ID' 为 2020212001 , 'SCORE' 为 100.0
*/
insert into new_table (ID, SCORE) values (2020212001, 100.0);
```
- ##### 删除数据
```
delete from 'table_name' where 'condition_1' and ...;
```
注意事项 :
1. 当 **where** 语句省略时, 操作会清空全表, 但不删除表.
2. 注意在 **`and`** 前后需要加上空格.
操作示例 :
```
/*
* 在 'new_table' 数据表中删除'NAME'字段为'NULL'的数据行
*/
delete from new_table where NAME = NULL;
```
- ##### 查询数据
```
select 'parm_name_1', ... from 'table_name' where 'condition_1' and ...;
```
注意事项 :
1. 要取出数据行的所有字段, 请使用 **\*** 代替指定字段名称.
2. 当 **where** 语句省略时, **NEDB** 会遍历全表进行搜索.
3. 注意在 **`,`** 和 **`and`** 前后需要加上空格.
操作示例 :
```
/*
* 在 'new_table' 数据表中查找'SCORE'字段为'90.0'的数据行的所有信息
*/
select * from new_table where SCORE = 90.0;
```
- ##### 修改数据
```
update table_name set 'parm_name_1' = 'value_1', ... where 'condition_1' and ...;
```
注意事项 :
1. 主键值不能被修改.
2. 当 **where** 语句省略时, **NEDB** 会将全表数据进行相应替换.
3. 注意在 **`and`** 前后需要加上空格.
操作示例 :
```
/*
* 在 'new_table' 数据表中将'ID'字段为'2020212001'的数据行的'SCORE'信息修改为'150.0'
*/
update new_table set SCORE = 150.0 where ID = 2020212001;
```
- ##### 获取数据表结构
```
describe table 'table_name';
```
注意事项 :
1. 此操作将返回该数据表单页最大字节数, 字段名称和字段类型.
- ##### 删除数据表
```
drop table 'table_name';
```
注意事项 :
1. 此操作将直接删除数据文件, 请谨慎操作.
- ##### 列出所有数据表
```
select tables;
```
注意事项 :
1. 此操作将返回加载到内存中的所有表名称.
- ### Error Code Table
|Code|Description|Code|Description|
|:---:|:---:|:---:|:---:|
|0|NO_ERROR|1|SYSTEM_ERROR|
|2|SIZE_NOT_ALLOWED|3|DIR_ERROR|
|4|FILE_OPEN_ERROR|5|FILE_NOT_FOUND|
|6|FILE_DAMAGED|7|SQL_FORM_ERROR|
|8|SQL_UNDEFINED|9|ACTION_BUSY|
|10|TABLE_EXIST|11|TABLE_NOT_FOUND|
|12|TABLE_NUM_REACH_LIMIT|13|PARAM_EMPTY|
|14|PARAM_FORM_ERROR|15|PARAM_NOT_FOUND|
|16|PARAM_NUM_MISMATCH|17|VALUE_EMPTY|
|18|TYPE_UNDEFINED|19|TYPE_INT_MISMATCH|
|20|TYPE_INT64_MISMATCH|21|TYPE_REAL_MISMATCH|
|22|TYPE_INT_OVERFLOW|23|TYPE_INT64_OVERFLOW|
|24|TYPE_REAL_OVERFLOW|25|TYPE_TEXT_OVERFLOW|
|26|TYPE_LONGTEXT_OVERFLOW|27|KEY_TYPE_NOT_ALLOWED|
|28|KEY_VAL_EXIST|29|KEY_VAL_REQUIRED|
|30|KEY_VAL_CHANGE_NOT_ALLOWED|31|DATA_NOT_FOUND|
|32|COMPARE_NONSUPPORT|33|COMMAND_UNDEFINED|
- ### Interface
- ##### 简介
**`NEDB`** 提供简易的对外接口, 以整合入各类项目使用. 接口格式参考 **`SQLite`** 的主要接口格式, 包含数据库创建, 文件读取, 指令执行三大核心功能.
- ##### 使用说明
1. **`NEDB`** 外部接口静态库文件为 **`libnedb.a`** , 动态库为 **`libnedb.so`** , 入口头文件为 **`NEDB.h`** , 只需在其他项目中引用该头文件并再编译时连接该静态库/动态库即可.
```
/**
* @ g++ 参考指令
*
* -o out 指定输出文件名
* -L ./ 指定库路径
* -l ne 链接静态库, nedb为'libnedb.a'去掉前缀'lib'和后缀'.so'
*/
g++ main.cpp -o out -L ./ -l ne
```
2. 默认单数据库结构体指针能存 **`200`** 张数据表.
3. 为便于测试, 默认单页数据最大存储量为 **`0.4KB`** , 可通过接口修改.
4. 接口当前仅限 **`C++`** 语言.
- ##### 接口说明
1. 命名空间与类
```
namespace NE
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
2022春季学期_北京邮电大学_数据结构课程设计_简单数据库_NEDB.zip (34个子文件)
NEDB-main
include
Utils
BasicUtils.hpp 3KB
BalanceTree.h 31KB
main.h 6KB
Basic
data.h 9KB
process.h 2KB
storage.h 901B
Interface
NEDB.h 9KB
Makefile 2KB
src
Utils
analyzer.cpp 5KB
implement.cpp 1KB
basic.cpp 10KB
main.cpp 1KB
Process
parser.cpp 8KB
executor.cpp 9KB
Interface
Console.cpp 5KB
NEDB.cpp 4KB
IO
input_stream.cpp 856B
storage.cpp 7KB
Data
table.cpp 6KB
index.cpp 5KB
row.cpp 4KB
page.cpp 969B
Operation
update.cpp 4KB
insert.cpp 6KB
delete.cpp 6KB
select.cpp 5KB
LICENSE 11KB
LOG.md 4KB
build
libnedb.so 10.46MB
libnedb.a 28.45MB
NEDB 10.45MB
.gitignore 24B
README.md 17KB
scripts
colors.mk 105B
共 34 条
- 1
资源评论
好家伙VCC
- 粉丝: 1798
- 资源: 9088
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功