分享於

簡介

在關聯式資料庫中,資料庫結構描述定義了資料庫的結構及其組成部分,例如表格、欄位和索引。擷取和匯出此資訊在許多情境中都很有用,包括備份、遷移到新環境、視覺化資料結構,以及在程式碼庫中管理這些結構。

在本簡短指南中,我們將討論如何使用 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、基礎架構和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。