小巧、快速、可靠。
任選三項。
UNION 虛擬表格
  1. UNION 虛擬表格(以下簡稱「union-vtab」)是一種 虛擬表格,可讓多個獨立的 rowid 表格 表格看起來像一個大型表格。

  2. 參與 union-vtab 的表格可以位於同一個資料庫檔案中,也可以位於已 ATTACH 到同一個資料庫連線的不同資料庫檔案中。

  3. union-vtab 並未內建於 SQLite 中。Union-vtab 是一種 可載入擴充功能。Union-vtab 的原始程式碼包含在一個檔案中,位於 SQLite 原始程式碼樹中的 ext/misc/unionvtab.c

  4. 新的 union-vtab 執行個體建立方式如下

    CREATE VIRTUAL TABLE temp.表格名稱 USING unionvtab(查詢);
  5. 每個 union-vtab 都必須位於 TEMP 名稱空間中。因此,表格名稱 前面的「temp.」是必要的。只有 union-vtab 本身需要位於 TEMP 名稱空間中,而要進行聯合的個別表格可以是任何 ATTACH 的資料庫。

  6. union-vtab 的 CREATE VIRTUAL TABLE 陳述式中的 查詢 必須是一個格式良好的 SQL 查詢,會傳回四個欄位和任意數量的列。查詢 結果中的每一列都代表一個要參與聯合的單一表格。

    1. 第一個欄位是包含表格的資料庫的架構名稱。範例:「main」、「zone512」。
    2. 第二個欄位是表格名稱。
    3. 第三欄是表格中任何 rowid 的最小值。
    4. 第四欄是表格中任何 rowid 的最大值。
  7. union-vtab 的 CREATE VIRTUAL TABLE 陳述式的查詢可以是 SELECT 陳述式或 VALUES 子句

  8. 查詢在第一次遇到 CREATE VIRTUAL TABLE 陳述式時執行一次,而該一次執行的結果用於所有後續存取 union-vtab。如果查詢的結果改變,則 union-vtab 應 DROP 並重新建立,以導致查詢再次執行。

  9. union-vtab 中各種表格的 rowid 頻帶中不得重疊。

  10. 參與 union-vtab 的所有表格必須具有相同的 CREATE TABLE 定義,但表格的名稱可以不同。

  11. 參與 union-vtab 的所有表格都必須是 rowid 表格

  12. tabname 的欄位名稱和定義將與基礎表格相同。應用程式可以存取tabname,就像它是實際基礎表格之一一樣。

  13. union-vtab 中的表格不得包含超出 CREATE VIRTUAL TABLE 陳述式中查詢所建立的 rowid 邊界的項目。

  14. 當查詢的約束屬於以下所示的形式時,union-vtab 將最佳化對基礎實際表格的存取。未來可能會最佳化其他類型的約束,但只有這些約束在初始實作中最佳化。

    • rowid=$id
    • rowid IN query-or-list
    • rowid BETWEEN $lwr AND $upr

    可以使用其他類型的約束,但其他約束會針對每一列個別檢查,且不會進行最佳化(至少一開始不會)。無論是否進行最佳化,所有約束檢查都是完全自動的。此項目符號中提到的最佳化僅為效能考量。無論查詢是否最佳化,都會取得相同的結果。

  15. union-vtab 為唯讀。日後可能會新增寫入支援,但寫入並非初始實作的一部分。

  16. 請注意: sqlite3_blob_open() 介面適用於 union-vtab。BLOB 內容必須使用一般 SQL 陳述式從 union-vtab 讀取。

此頁面最後修改於 2022-01-08 05:02:57 UTC