SQLITE DB如何将多个表的数据保存在一个文件中?

Posted

技术标签:

【中文标题】SQLITE DB如何将多个表的数据保存在一个文件中?【英文标题】:How does SQLITE DB saves data of multiple tables in a single file? 【发布时间】:2019-12-26 17:33:14 【问题描述】:

我正在做一个项目来创建 SQLite 数据库的简化版本。当我试图弄清楚它如何将具有不同模式的多个表的数据存储在一个文件中时,我陷入了困境。我想它应该使用一些索引来映射不同表的数据。有人可以更清楚地了解它的实际完成方式吗?谢谢。

编辑:我想文档中已经有解释,但正在寻找一些更简单的方法来更好更快地理解它。

【问题讨论】:

@mvp,这就是我现在想要做的。但它有点压倒性。所以我想知道是否有更简单的文章或文档可以让我开始阅读 【参考方案1】:

模式是所有实体(表、视图等)(作为一个整体的数据库)的列表,而不是基于每个实体存在的许多模式的数据库。

数据本身存储在页面中,每个页面都归一个实体所有。保存的正是这些块。

默认页面大小为 4k。您会注意到文件大小始终是 4K 的倍数。您还可以通过实验创建一个包含一些表的数据库,注意它的大小,然后添加一些数据,如果添加的数据不需要另一个页面,请查看文件的大小是否相同。这证明了这一切都是关于页面而不是线性/连续的数据流。

架构保存在一个名为 sqlite_master 的表中。该表有列:-

类型(类型,例如表格等), name(赋予实体的名称), tbl_name(实体适用的故事) 根页面(映射到第一页)

sql(用于生成实体的 SQL,如果有)

请注意,如果存在临时表,也可能存在另一个架构 sqlite_temp_master。

例如:-

使用SELECT * FROM sqlite_master; 可能会导致类似:-

2.6. Storage Of The SQL Database Schema

【讨论】:

好的,谢谢您的回答。所以根页面是存储特定实体数据的“页码”。并使用(page size * page number),我们实际上可以读取该特定实体的内容? @kartik 如果您想重新发明***,是的,您可以,通常您让 SQlite 接口/API 代表您完成。 @Mike_T 实际上,我试图了解数据库如何存储数据。在此过程中,我试图制作一个非常简化的 sqlite 版本,以便我可以更好地理解它,就像一个练习一样。感谢您的回答,它真的很有帮助!

以上是关于SQLITE DB如何将多个表的数据保存在一个文件中?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从(设计时未知)SQLite db 动态显示到表视图

跨多个 sqlite db 文件连接

android如何查看手机中的db文件,查看sqlite数据库的表结构

将图像保存到数据库并从服务器加载

如何将数据从 listview 单选按钮保存到 SQLite?

如何通过 FMDB 将数据保存和检索到 sqlite