UNION 虛擬表格(以下簡稱「union-vtab」)是一種 虛擬表格,可讓多個獨立的 rowid 表格 表格看起來像一個大型表格。
參與 union-vtab 的表格可以位於同一個資料庫檔案中,也可以位於已 ATTACH 到同一個資料庫連線的不同資料庫檔案中。
union-vtab 並未內建於 SQLite 中。Union-vtab 是一種 可載入擴充功能。Union-vtab 的原始程式碼包含在一個檔案中,位於 SQLite 原始程式碼樹中的 ext/misc/unionvtab.c。
新的 union-vtab 執行個體建立方式如下
CREATE VIRTUAL TABLE temp.表格名稱 USING unionvtab(查詢);
每個 union-vtab 都必須位於 TEMP 名稱空間中。因此,表格名稱 前面的「temp.」是必要的。只有 union-vtab 本身需要位於 TEMP 名稱空間中,而要進行聯合的個別表格可以是任何 ATTACH 的資料庫。
union-vtab 的 CREATE VIRTUAL TABLE 陳述式中的 查詢 必須是一個格式良好的 SQL 查詢,會傳回四個欄位和任意數量的列。查詢 結果中的每一列都代表一個要參與聯合的單一表格。
union-vtab 的 CREATE VIRTUAL TABLE 陳述式的查詢可以是 SELECT 陳述式或 VALUES 子句。
查詢在第一次遇到 CREATE VIRTUAL TABLE 陳述式時執行一次,而該一次執行的結果用於所有後續存取 union-vtab。如果查詢的結果改變,則 union-vtab 應 DROP 並重新建立,以導致查詢再次執行。
union-vtab 中各種表格的 rowid 頻帶中不得重疊。
參與 union-vtab 的所有表格必須具有相同的 CREATE TABLE 定義,但表格的名稱可以不同。
參與 union-vtab 的所有表格都必須是 rowid 表格。
tabname 的欄位名稱和定義將與基礎表格相同。應用程式可以存取tabname,就像它是實際基礎表格之一一樣。
union-vtab 中的表格不得包含超出 CREATE VIRTUAL TABLE 陳述式中查詢所建立的 rowid 邊界的項目。
當查詢的約束屬於以下所示的形式時,union-vtab 將最佳化對基礎實際表格的存取。未來可能會最佳化其他類型的約束,但只有這些約束在初始實作中最佳化。
可以使用其他類型的約束,但其他約束會針對每一列個別檢查,且不會進行最佳化(至少一開始不會)。無論是否進行最佳化,所有約束檢查都是完全自動的。此項目符號中提到的最佳化僅為效能考量。無論查詢是否最佳化,都會取得相同的結果。
union-vtab 為唯讀。日後可能會新增寫入支援,但寫入並非初始實作的一部分。
請注意: sqlite3_blob_open() 介面不適用於 union-vtab。BLOB 內容必須使用一般 SQL 陳述式從 union-vtab 讀取。
此頁面最後修改於 2022-01-08 05:02:57 UTC