淦!用2000行代码,肝一个属于自己的SQL数据库

博主出于对数据库的兴趣,用约2000行Golang代码实现了一个名为“Go SQL DB”的关系型数据库,旨在展现数据库基本原理和关键设计。项目支持简单的SQL查询,如SELECT、INSERT,基于B+Tree的存储引擎,并提供HTTP接口。虽然有限制,如未实现DDL,但作为一个学习和理解数据库工作原理的实例,具有参考价值。
摘要由CSDN通过智能技术生成

在 C 被当做“高级语言”,雷布斯和小马哥还在写代码的年代,数据库还不是一个成熟的事物。

前言

和很多技术从简单到复杂的发展历程不太一样,数据库首先成熟并被大规模使用的是 RDBMS(关系型数据管理系统),后来才逐渐兴起了实现相对简单,以 Redis 为代表的 KV 型的数据库。

数据库从后端的技术上看是一个算法、数据结构、系统工程、性能优化的交汇点。

笔者一直对数据库领域充满了兴趣,前前后后主导和参与了很多数据库及相关系统的开发。这三年的主要业余时间都在研究数据库,由于大多数数据库项目都历史悠久,代码量基本都在50万行以上,阅读起来让人颇感头疼。咬牙坚持了两年,有了一点点心得,分享给大家!

SQL数据库学习资料课件笔记

因此决定写一个代码量尽量少,但又能有现代数据库的基本架构的项目,于是花了一周时间写了“GO SQL DB”。

“Go SQL DB” 是一个研究目的的支持SQL查询的关系型数据库。主要目标是为了向数据库爱好者展示一个关系型数据库的基本原理和关键设计。

因此,为了便于理解,采取了很多取巧但不是很严谨的设计,代码量控制在了 2000 行左右(包含了 400 多行的单元测试代码)。

这个C++管理系统基本涵盖了“学生成绩管理系统”的所有功能,你可以从中借鉴到C++链表、类、封装、继承、文件操作、排序等等很多知识,极具借鉴意义,以下为本项目的功能介绍: 1. 建立文件 (1)可以使用默认文件名或指定文件名将记录存储到 (2)设置适当的标志位,作为对记录进操作的 (3)写同名文件将覆盖原来文件的 2.增加学生记录 (1) 可在已有记录后面追加新的记录 (2) 可以随时增加新的记录,它们仅保存在向量数组中 (3) 可以将一个文件读入,追加在已有记录之后 (4) 采取文件追加方式时,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续追加操作方式 3. 新建学生信息文件 (1) 用来新建学生信息记录 (2) 如果已经有记录存在,可以覆盖原记录或者在原记录后面追加,也可以将原有记录信息保存 到一个指定文件,然后重新建立记录 (3) 给出相应的提示信息 4. 显示记录 (1) 如果没有记录可供显示,给出提示信息 (2) 可以随时显示内存中的记录 (3) 显示表头 5. 文件存储 (1) 可以按默认名字或指定名字存储记录文件 6. 读取文件 (1) 可以按默认名字或指定名字将记录文件读入内存 (2) 可以将指定或默认文件追加到现有记录的尾部 (3) 可以将文件连续追加到现有记录并更新记录中的“名次” 7. 删除记录 (1) 可以按“学号”、“姓名”或“名次”方式删除记录 (2) 标志将被删除的记录, 可以再次取消标志, 经确认后删除已经标志的记录(3) 如果记录是空表, 删除时应给出提示信息并返回主菜单 (4) 如果没有要删除的信息, 输出“没有找到”的信息 (5) 更新其他记录的名次 (6) 删除操作仅限于内存, 只有执存储操作时, 才能覆盖原记录 8. 修改记录 (1) 可以按“学号”、“姓名”或“名次”方式查找要修改的记录内容 (2) 给出将被修改记录的信息, 经确认后进修改 (3) 如果记录已经是空表,应给出提示信息并返回主菜单 (4) 如果没有找到需要修改的信息, 输出“没有找到”的信息 (5) 更新其他记录的名次 (6) 修改操作仅限于内存, 只有执存储操作时, 才能覆盖原记录 9. 查询记录 (1) 可以按“学号”、“姓名”或“名次”方式查询记录 (2) 能给出查询记录的信息 (3) 如果查询的信息不存在, 输出提示信息 10. 对记录进排序 (1) 可以按”学号”进升序和降序排列 (2) 可以按”姓名”进升序和降序排列 (3) 可以按”名次”进升序和降序排列 (4) 如果属于选择错误, 可以立即退出程序
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值