一个用 Rust 编写的简易关系型数据库系统,支持基本的 SQL 操作,包括数据持久化、交互式 REPL 环境和语法高亮功能。
- 常用 SQL 支持:实现了常用的 SQL 语句
- 数据持久化:使用
bincode序列化,支持数据在程序重启后的持久保存
- 交互式环境:提供友好的命令行交互环境
- 语法高亮:支持 SQL 关键词、操作符、字符串、注释等的彩色显示
- 多行输入:支持多行 SQL 语句,按
Ctrl+J换行 - 命令历史:使用上下箭头浏览历史命令
INT(length)- 整数类型,可选长度限制VARCHAR(length)- 可变长度字符串,可选长度限制NULL- 空值支持
PRIMARY KEY- 主键约束,确保唯一性NOT NULL- 非空约束- 长度约束验证
- 类型匹配验证
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
);示例:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT(3)
);DROP TABLE table_name [, table_name2, ...];示例:
DROP TABLE users;
DROP TABLE users, products; -- 删除多个表-- 插入所有列的值
INSERT INTO table_name VALUES (value1, value2, ...);
-- 指定列插入
INSERT INTO table_name (column1, column2) VALUES (value1, value2);示例:
INSERT INTO users VALUES (1, "Alice", 25);
INSERT INTO users (id, name) VALUES (2, "Bob");-- 基本查询
SELECT * FROM table_name;
SELECT column1, column2 FROM table_name;
-- 带条件查询
SELECT * FROM table_name WHERE condition;
-- 表达式和计算
SELECT name, age * 2 FROM users;
SELECT id, price * 1.1 AS new_price FROM products;支持的条件操作符:
- 比较操作符:
=,<,>,<=,>=,<> - 逻辑操作符:
AND,OR,NOT - 空值检查:
IS NULL,IS NOT NULL - 数学运算:
+,-,*,/
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;示例:
UPDATE users SET age = 26 WHERE id = 1;
UPDATE products SET price = price * 1.1 WHERE category = "electronics";DELETE FROM table_name WHERE condition;示例:
DELETE FROM users WHERE age < 18;
DELETE FROM products WHERE stock = 0;- 单行注释:
-- 这是注释或# 这是注释 - 多行注释:
/* 这是多行注释 */
- Rust 1.70+
- Cargo
cargo build --releasecargo runcargo run -- input.sqlsrc/
├── main.rs # 程序入口
├── lib.rs # 库接口
├── executor/ # SQL 执行引擎
│ ├── mod.rs # 执行器模块入口
│ ├── create_table.rs # CREATE TABLE 实现
│ ├── insert.rs # INSERT 实现
│ ├── query.rs # SELECT 实现
│ ├── update.rs # UPDATE 实现
│ ├── delete.rs # DELETE 实现
│ ├── drop.rs # DROP TABLE 实现
│ ├── table.rs # 表结构和操作
│ ├── storage.rs # 数据持久化
│ └── error.rs # 错误处理
├── model/ # 数据模型
│ └── mod.rs # 列、数据类型、值定义
├── parser/ # SQL 解析器
│ ├── mod.rs # 解析器入口
│ └── error.rs # 解析错误
├── repl/ # 交互式环境
│ ├── mod.rs # REPL 模块入口
│ ├── repl.rs # REPL 实现
│ └── highlighter.rs # 语法高亮
└── utils/ # 工具函数
├── mod.rs # 工具模块入口
├── expr_evaluator.rs # 表达式求值
└── query_processor.rs # 查询处理
项目包含完整的集成测试套件,位于 tests/ 目录:
cargo testTEST_CASES=11 cargo test- 基本 CRUD 操作
- 复杂
WHERE条件查询 - 表达式计算
- 数据类型验证
- 约束检查
- 错误处理
- 多表操作
- 不支持
JOIN操作 - 不支持
GROUP BY和聚合函数 - 不支持索引
- 不支持外键约束
- 不支持事务
- 单线程执行
- 使用
lazy_static实现正则表达式的懒加载,提升高亮性能 - 智能刷新控制,避免过度渲染
- 详细的错误信息,包含具体的错误位置和原因
- 类型不匹配检测
- 约束违反检测
- 主键冲突检测
- 命令历史记录持久化
- 多行输入支持
- 智能语句完成检测
- 优雅的错误提示
本项目使用了以下外部库,在此表示感谢: