这可能是一个愚蠢的问题或多次询问,我搜索它但没有找到正确的答案。
当我们在SQL引擎上输入
"Create table xxxx"如何在c ++中实现这个时,究竟是怎么回事,我的意思是它如何创建变量dynamicalyy“xxxx”并将数据存储在其中。如果我查询
"select * from xxxx"如何变量“xxxx”并获取值。我已经看过SQLite和Postgres,我无法理解那些复杂的事情。任何人都可以用更简单的方式解释它。如果可能的话用一个小例子。(注意:它是什么样的sql引擎)。
答案 0 :(得分:3)
数据库使用各种基于磁盘的数据结构(如B树,线性哈希表和堆文件)将数据存储在磁盘上。这是一个非常复杂的主题,需要大量的研究,但主要取决于您要存储的数据类型(无论是固定长度还是可变长度),许多数据库使用的常见策略是存储可变长度数据存储在 heap file 中的网页。
堆文件基本上是一系列固定长度的页,每个页面包含不同记录的插槽。页面存储在磁盘上,但使用分页子系统加载到内存中,类似于文件系统的工作方式。为了便于快速查找存储在页面上的记录,使用索引结构(通常是B树或B +树,但也可能是哈希表)来查找正在查找的记录的正确页面和记录号存储在堆文件中。
SQL查询引擎位于底层数据结构之上。查询引擎解析查询,然后使用索引查找相应的记录。 (这里涉及许多其他方面,但这是它的要点。)
毋庸置疑,用C ++(或任何语言)实现关系数据库需要大量的工作。如果您真的有兴趣,我建议您阅读Database Management Systems。
答案 1 :(得分:1)
对于SQL Server,概述从here开始。
SQL Server数据库中的对象是 存储为8 KB页面的集合。 本节介绍了该方法 表和索引的页面是 有组织,存储和访问。
答案 2 :(得分:0)
你是否必须在c ++中实现关系数据库,如果你只是想要一些方便的数据结构来存储多个索引中的数据,请看boost.MultiIndex