Skip to content

这是一个基于 Flex 和 Bison 实现的 SQL 解析器项目,支持图形界面(GUI)和命令行两种使用方式。

Notifications You must be signed in to change notification settings

lbqlovel/SQL_system

Repository files navigation

DBMS 数据库管理系统

这是一个基于 Flex 和 Bison 实现的 SQL 解析器项目,支持图形界面(GUI)和命令行两种使用方式。

项目概述

本项目实现了一个简单的数据库管理系统(DBMS),能够处理基本的 SQL 命令,包括:

  • CREATE DATABASE / DROP DATABASE
  • USE DATABASE
  • CREATE TABLE / DROP TABLE
  • INSERT
  • SELECT
  • UPDATE
  • DELETE
  • SHOW TABLES

技术栈

  • Flex:词法分析器生成工具
  • Bison:语法分析器生成工具
  • C 语言:核心实现语言
  • Windows API:GUI 界面实现
  • MSYS2:提供 Windows 下的类 Unix 环境

项目结构

.
├── sql.l              # 词法分析器定义文件
├── sql.y              # 语法分析器定义文件
├── sql.c              # 数据库核心实现
├── sql.h              # 数据库头文件
├── gui.c              # GUI 界面实现
├── gui.h              # GUI 头文件
├── sql_exec.c         # SQL 执行包装器
├── sql_exec.h         # SQL 执行头文件
├── build_gui.bat      # GUI 版本构建脚本
├── run_gui.bat        # GUI 版本运行脚本
├── database.txt       # 数据库存储文件
└── README.md          # 项目说明文档

功能特性

1. SQL 命令支持

  • 数据库的创建、删除和切换
  • 表的创建和删除
  • 数据的插入、查询、更新和删除
  • 条件查询(WHERE 子句)
  • 基本的表达式计算

2. 语法特性

  • 支持基本的算术运算(+、-、*、/)
  • 支持比较运算符(=、<、>、<=、>=、!=)
  • 支持逻辑运算符(AND、OR)
  • 运算符优先级处理

3. 数据类型

  • INT:整数类型
  • CHAR(n):字符串类型,n 为字符串长度

4. 图形界面

  • 友好的 Windows GUI 界面
  • SQL 语句输入框
  • 执行结果实时显示
  • 支持中文显示

环境配置

  1. 安装 MSYS2
  2. 通过 MSYS2 安装必要的工具:
    pacman -S gcc
    pacman -S flex
    pacman -S bison

构建和运行

GUI 版本(推荐)

  1. 使用 build_gui.bat 脚本编译项目:

    build_gui.bat
  2. 运行生成的可执行文件:

    run_gui.bat

    或者直接双击 dbms_gui.exe

命令行版本

如果需要命令行版本,可以修改 sql.y 文件,移除 #ifndef GUI_MODE 条件编译,然后使用命令行方式编译运行。

使用示例

创建数据库

CREATE DATABASE school;

使用数据库

USE school;

创建表

CREATE TABLE students (
    id INT,
    name CHAR(50),
    age INT
);

插入数据

INSERT INTO students (id, name, age) VALUES (1, 'Alice', 20);
INSERT INTO students (id, name, age) VALUES (2, 'Bob', 22);

查询数据

SELECT * FROM students;
SELECT * FROM students WHERE age > 18;
SELECT name, age FROM students WHERE age >= 20;

更新数据

UPDATE students SET age = 21 WHERE id = 1;

删除数据

DELETE FROM students WHERE age < 18;

显示表列表

SHOW TABLES;

删除表

DROP TABLE students;

删除数据库

DROP DATABASE school;

注意事项

  1. 所有 SQL 语句必须以分号结尾
  2. 字符串值需要使用单引号括起来
  3. 支持的数据类型包括 INT 和 CHAR(n)
  4. 数据库和表名、字段名区分大小写
  5. 数据库文件自动保存到 database.txt,程序启动时自动加载

GUI 界面说明

GUI 界面包含以下组件:

  • SQL 输入框:在上方多行文本框中输入 SQL 语句
  • 执行 SQL 按钮:点击执行输入的 SQL 语句
  • 清空输出按钮:清空结果显示区域
  • 结果显示区域:下方显示 SQL 执行结果和消息

文件说明

  • sql.l:Flex 词法分析器定义文件
  • sql.y:Bison 语法分析器定义文件
  • sql.c:数据库操作核心实现
  • sql.h:数据库数据结构定义
  • gui.c:Windows GUI 界面实现
  • gui.h:GUI 函数声明
  • sql_exec.c:SQL 字符串执行包装器
  • sql_exec.h:SQL 执行函数声明
  • database.txt:数据库持久化存储文件

贡献指南

欢迎提交 Issue 和 Pull Request 来帮助改进项目。在提交代码前,请确保:

  1. 代码符合项目的编码规范
  2. 添加了必要的测试用例
  3. 更新了相关文档

技术支持

lbqlovel

About

这是一个基于 Flex 和 Bison 实现的 SQL 解析器项目,支持图形界面(GUI)和命令行两种使用方式。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published