# AliangSQL **Repository Path**: xpjcoo/AliangSQL ## Basic Information - **Project Name**: AliangSQL - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-07 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## AliangSQL 利用go 开发基于B+树的小型关系型数据库 开发环境:mac 1.终端输入:git clone https://github.com/aaaaaaliang/AliangSQL.git 2.main 方法里直接运行即可 ## 目的 “What I cannot create, I do not understand.” – Richard Feynman 正如这句名言,理解一个事物最好的办法就是亲自设计制作它,本文将介绍一个简单的关系型数据库系统(类似MySQL、sqlite等)的开发过程,用于理解关系型数据库基本工作原理,我称它为AliangSQL。 ## 帮助界面 ![image](https://github.com/aaaaaaliang/AliangSQL/assets/117182742/f9c6411d-7ab8-40bb-aa96-3d3d11598f79) 1.使用go开发; 2.已实现基本的CURD操作,使用控制台SQL:
  1. 使用数据库语法: use xxx; // use blog;
  2. 创建表语法: create table xx (字段 类型,字段 类型); // create table user (id int,name string);
  3. 插入语法: insert into xx (字段 , 字段) values (值,值); // insert into user (id ,name) values (1,'阿亮');
  4. 查询语法: select * from 数据库名 表名; // select * from blog user;
  5. 修改语法: update xx set 字段 = 值 where 字段 = 值; //update user set name = '亮亮' where id = 1;
  6. 删除语法: delete from xx where 字段 = 值 ; // delete from user where id = 1;
3.底层使用B+树(B+ TREE)构建索引; 4.利用.csv文件存储表 ## 过程 ![image](https://github.com/aaaaaaliang/AliangSQL/assets/117182742/9026eb1a-3820-4a09-b91e-1324fd48f574) 主要开发步骤
  1. 创建一个控制台对话交互程序;
  2. 创建一个简单的词法分析器用来解析SQL语句;
  3. 编写CURD函数实现数据库的增删改查操作;
  4. 创建一个B+树索引引擎,进行数据库的索引和磁盘读写操作,数据表将以.csv文件存储。
b+树实现 ### b+树特性
  1. 每个节点至多有M个子树。
  2. 除根结点外,每个结点至少有ceil(M/2)个子树。
  3. 结点的子树个数于关键字个数相等。
  4. 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  5. 所有的非终端结点(非叶子结点)可以看成是索引部分,结点中仅含有其子树(根结点)中的最大(或最小)关键字。
![image](https://github.com/aaaaaaliang/AliangSQL/assets/117182742/b80e8362-d35d-456c-b0c9-f6442695a57b)