【手写数据库内核miniToadb】第2天 与数据库交互的桥梁--SQL解绍

【手写数据库内核miniToadb】第2天 与数据库交互的桥梁--SQL解绍
专栏内容手写数据库toadb
本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者,在开源无限的公众号更新会更及时。

一、概述


上一节通过一个简单的C语言程序来模拟数据库的行为,从处理能力来看,也有创建表,插入、删除、更新、查询等操作,但是与大家认为的数据库差距很大。

关系型数据库的一个很明显的特点,就是有标准的操纵数据库的语言,它就是常用的SQL。我们来开发的数据库内核支持这一标准SQL,这样才能符合数据库的一个审美。

说到语言,就不得不做语言的解析了,类似于自然语经过人脑分析后,转换为一系列人的动作行为;而数据库中的解析模块要把用户的SQL表达的意图经过词法和语法分析,转换成程序可处理的数据结构。

这听起来还是很有意思的,那么我们现在就开始这第一步吧。

在开始之前再补充一些内容,整个开发过程主要使用C语言开发,在解析中会用到正则表达式和上下文无关语法,它们占比非常小。

开发所用的系统是CentOS 8.2,当然其它linux版本可能命令会有差异,Centos系列还是比较一致,可以看到后面都会使用Makefile、gcc等编译工具;

源码编辑器可以使用流行的VScode,支持跨平台,当然也可以使用Eclipse,或者自己熟悉的其它工具,不同编辑器之间的默认字符集可能不同,最好设置为UTF-8,Linux下的换行模式,统一的格式避免一些奇妙的问题。

二、SQL简述


SQL,全称为Structured Query Language,即结构化查询语言,是一种专门用来与数据库进行通信的语言。

2.1 发展历史

  • SQL语言的发展始于1974年,由IBM公司的Boyce和Chamberlin提出,并在IBM研制的关系数据库系统System R上实现。SQL的设计初衷是为了提高数据库查询效率,但随着时间的发展,SQL的功能已经扩展到数据的插入、更新和删除等操作。
  • 1986年,SQL成为美国国家标准(ANSI)和国际标准化组织(ISO)的标准,随后在1987年成为国际标准。

2.2 SQL的功能

按功能的不同,将SQL划分为DQL,DDL,DML,DCL等类型,经常使用的查询,插入更新等就属于DQL和DML范围。

在这里插入图片描述
  • 数据查询(DQL):Data Query Language, 使用SELECT语句从数据库中检索数据。查询操作的灵活性体现在能够根据需要选择特定的列或行,使用WHERE子句进行条件筛选,以及通过ORDER BY进行排序等。
  • 数据定义(DDL):Data Definition Language, 使用CREATE、ALTER和DROP等语句来定义数据库结构,如创建新表或修改、删除表。CREATE语句用于生成新的数据库对象、视图或索引;ALTER用于修改现有结构,如添加或删除列;DROP语句则用于删除数据库对象。
  • 数据操纵(DML):Data Manipulation Language, 使用INSERT、UPDATE和DELETE等语句来插入、更新或删除数据库中的数据。
  • 数据控制(DCL):Data Control Language, 使用GRANT和REVOKE等语句来控制数据库的访问权限。
  • 事务控制(TCL):Transaction Control Language, 提供BEGIN TRANSACTION、COMMIT和ROLLBACK等语句用于管理事务,确保数据库操作的原子性、一致性、隔离性和持久性(ACID属性)。
  • 存储过程和触发器:允许创建存储过程和触发器,这些数据库对象可以在特定事件或条件下自动执行一系列预定义的SQL语句。
  • 嵌入式SQL和SQL API:SQL的嵌入式实现允许它被直接嵌入到高级编程语言中,如Java、C#等,通过特定的API调用来执行数据库操作。

2.3 SQL标准的发展

SQL标准的发展是一个不断演进的过程,旨在提高数据库的互操作性、可扩展性和性能。

  1. 早期发展
    • 1970年代初,IBM公司的埃德加·科德提出了关系数据库的概念,为SQL的诞生奠定了基础。
    • 1974年,IBM的D.D.Chamberlin和R.F.Boyce在研制关系数据库管理系统System R时,研制出一套规范语言SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名为SQL。
  2. 标准化过程
    • 1986年,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3.135-1986),后为国际标准化组织(ISO)采纳为国际标准。
    • 1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。
  3. 持续更新
    • 自1989年以来,SQL标准经历了多次更新和完善,如SQL-92、SQL-99等版本。
    • 这些更新旨在添加新功能、提高性能、增强与其他技术的集成等。
  4. 最新标准
    • 国际标准化组织ISO于2023年6月1日正式发布了最新SQL标准,即SQL:2023。
    • SQL:2023标准包含了多个部分,涵盖了SQL语言的基本框架、基本原则、调用级接口、持久存储模块、外部数据管理、对象语言绑定、信息与定义概要等多个方面。
    • 新增了第16部分SQL/PGQ,支持图形查询语言GQL,增强了SQL对图形数据处理的能力。
    • 强化了SQL语言和JSON功能,以更好地支持现代应用的需求。

SQL标准的发展经历了多个阶段,并持续得到更新和完善。最新SQL标准(SQL:2023)的发布为数据库技术的发展注入了新的活力,并推动了数据库系统的不断创新和进步。

大家对数据库内核有兴趣的话,可以关注我,从今天开始从零编写一个可以使用的数据库内核。

Read more

MySQL查看命令速查表

MySQL查看命令速查表

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 1 ~> MySQL 查看类命令大全 * 1.1 查看数据库 * 1.2 查看表 * 1.3 查看数 * 1.4 查看用户 / 权限 * 1.5 最常用组合(截图里就是这套) * 2 ~> MySQL常用核心命令速查表 * 2.1 MySQL 常用核心命令速查表 * 2.

By Ne0inhk
Spring AI系列之RAG(检索增强生成)从原理到实战指南

Spring AI系列之RAG(检索增强生成)从原理到实战指南

Spring AI系列之RAG(检索增强生成)从原理到实战指南 在LLM(大语言模型)时代,如何让AI既拥有通用能力又具备专业知识?RAG技术给出了完美答案。本文将基于Spring AI生态,深入剖析RAG的核心原理、实现细节与优化策略。 一、为什么需要RAG? 在深入了解RAG之前,我们需要先认识传统LLM的局限性: 缺陷类型具体表现RAG解决方案知识截止模型知识有截止日期,无法获取最新信息实时检索外部知识库幻觉问题自信地生成看似合理但实际错误的内容基于检索到的真实信息生成上下文限制长文本处理能力有限只检索最相关的上下文片段领域专业度通用模型缺乏垂直领域深度知识外挂专业领域知识库 比喻理解:如果将LLM比作一个"高中毕业生",那么: * Fine-tuning(微调) = 让他花7年时间去医学院学习,然后成为医生 * RAG = 给他配备了一群专业主任医师作为顾问,遇到问题时先咨询专家再作答 二、RAG核心架构解析 2.1 整体工作流程 RAG的工作流程可以分为两大阶段:离线索引(Indexing) 和 在线检索生成(Retrieval & Gene

By Ne0inhk
一卡通核心交易平台的国产数据库实践解析:架构、迁移与高可用落地

一卡通核心交易平台的国产数据库实践解析:架构、迁移与高可用落地

文章目录 * 摘要 * 1. 业务与技术挑战拆解 * 2. 总体架构(从数据库边界看) * 3. 数据模型:以“不可变流水”为中心 * 3.1 流水表(交易事实表)建议 * 3.2 账户与余额:把“强一致”收敛到最小 * 4. 高可用与容灾:把“不可用窗口”工程化 * 4.1 同城高可用:主备切换与防脑裂 * 4.2 异地灾备:以“可恢复”为目标设计链路 * 5. 性能与稳定性:把瓶颈消灭在“写路径” * 5.1 连接治理:让资源可控 * 5.2 SQL治理:少做无谓计算

By Ne0inhk
Rust与Redis数据库开发实战:构建高性能会话管理系统

Rust与Redis数据库开发实战:构建高性能会话管理系统

Rust与Redis数据库开发实战:构建高性能会话管理系统 一、引言 💡Redis是一款高性能的内存数据库,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,具有读写速度快、内存占用少、跨平台等特点,非常适合开发缓存、消息队列、会话管理、实时数据分析等应用。 Rust语言以其内存安全、高性能和良好的工具链支持,成为开发Redis应用的理想选择。Rust生态系统中提供了多个优秀的Redis库,其中redis-rs是最成熟、最流行的一个。redis-rs提供了安全、易用的API,支持Redis的全部功能,包括事务处理、管道操作、发布订阅等。 二、开发环境搭建 2.1 安装Redis Redis通常已经预装在大多数操作系统中,你可以通过以下命令检查是否安装: # 检查Redis版本 redis-cli --version 如果没有安装,可以通过以下命令安装: macOS # 使用Homebrew安装 brew install redis # 启动Redis服务 brew services

By Ne0inhk