分享

简介

在关系数据库中,数据库模式定义了数据库的结构及其组件部分,如表、字段和索引。提取和导出此信息在许多情况下非常有用,包括备份、迁移到新环境、可视化数据结构以及在代码库中管理这些结构。

在本简短指南中,我们将讨论如何使用 sqlite3 命令导出 SQLite 数据库模式。与您用于管理数据库的相同命令可用于导出数据库数据和结构。在本指南中,我们将重点介绍提取数据结构本身。

基本用法

从 SQLite 导出数据库模式所需的命令如下所示

sqlite3 DATABASE_FILE.sqlite '.schema' > schema.sql

这里,DATABASE_FILE.sqlite 是包含您的数据和结构的 SQLite 数据库文件。 '.schema' 组件是告诉 SQLite 导出数据库模式而不包含任何数据的命令。 schema.sql 文件是将接收导出数据库结构的目标文件。

交互式执行

上述命令可以从命令行执行。您可以在 sqlite3 shell 中以交互方式执行此过程。

首先,使用 sqlite3 命令打开 SQLite 数据库文件

sqlite DATABASE_FILE.sqlite

接下来,设置输出,以便命令结果发送到文件而不是显示

.output schema.sql

最后,通过键入以下内容输出模式

.schema

现在,您可以选择通过键入以下内容将输出更改回标准输出

.output

在本指南的其余部分,我们将使用命令行演示其他功能,但请注意,如果需要,您可以使用此方法以交互方式复制此操作。

导出特定数据库的模式

要仅导出与特定数据库相关的模式,可以使用通配符选择属于该数据库的所有组件,语法如下

sqlite3 DATABASE_FILE.sqlite '.schema DATABASE.*' > database_schema.sql

例如,如果您有一个名为 sales.sql 的数据库文件,并且想要导出仅 VENDORS 数据库,可以键入以下内容

sqlite3 sales.sqlite '.schema VENDORS.*' > vendors_db_schema.sql

导出特定表

您还可以通过在 .schema 后面包含表名来导出特定表

sqlite3 DATABASE_FILE.sqlite '.schema TABLE' > table_schema.sql

此方法的另一种方法是使用通配符匹配而不是特定名称。 schema 命令为此使用 LIKE 模式匹配,这意味着百分号字符 (%) 用于匹配零个或多个字符,下划线 (_) 可以代表一个字符。

例如,要导出所有以 inventory 开头的表,可以键入以下内容

sqlite3 DATABASE_FILE.sqlite '.schema inventory%' > inventory_schemas.sql

此语法不允许同时指定多个模式或多个特定表,因此可能必须运行多个命令来导出所需的对象或转储所有内容并手动操作导出的模式。

在模式转储中包含数据库统计信息

您可以使用 .fullschema 命令代替 .schema 命令,还可以包含 SQLite 用于在内部确定查询计划等的所有统计表。在尝试调试查询为何以特定方式执行时,这可能是有用的信息

sqlite3 DATABASE_FILE.sqlite '.fullschema' > schema_with_statistics.sql

请注意,.fullschema 命令不允许您按表名进行过滤。

结论

能够导出你的模式可以让你将数据库结构保存到数据库本身之外。 这在设置新环境、随着需求变化而发展模式以及可视化存储的信息结构时很有帮助。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 从 2013 年开始撰写关于数据库、Linux、基础设施和开发者工具的文章。 他目前和妻子以及两只兔子住在柏林。 他通常不需要以第三人称写作,这对所有相关方来说都是一种解脱。