天天看點

SQL 資料和表

在一個 SQL

的系統

中,所有有意義的資料

都存儲在表和序列生成器中。

是以使用資料庫

的第一步是定義

一個表和這個表中可能使用的列。

SQL 标準同時也能支援臨時表和永久表,臨時表用于臨時性的存儲資料,永久表用于在資料庫中永久保持資料。

臨時表

臨時表的内容隻在連接配接的生命周期中存在,如果連接配接被終止,臨時表中的内容也将會被清除。臨時表中的内容隻對目前的連接配接可見,而不能被其他連接配接使用。臨時表的定義,請參考 SQL 标準中的 GLOBAL TEMPORARY 類型。

如果定義臨時表為永久表,當一個新的連接配接被建立的時候,這個連接配接也可以看到這個臨時表,但是這個表的資料會保額清空。當連接配接發出一個 commit 送出指令的時候,表中的内容将會被預設定義的内容替換掉。

如果表中定義了内容 ON COMMIT PRESERVE ROWS,那麼送出的時候,将不會用預設的值替換掉表中的内容。

永久表

HSQLDB 支援 SQL 标準中定義的表類型,但是所有定義的類型與表中存儲的資料有關。在 HSQLDB 中有三種類型的表,分别為 MEMORY,CACHED 和 TEXT。

MEMORY 表可以用指令 CREATE TABLE 來定義。這些表中存儲了所有資料的實體,當然你也可以通過 SQL 腳本對表中的資料進行修改,所有内容的修改将會被寫到 .log 和 .script 檔案

中。

.log 和 .script 檔案将會在資料庫下一次啟動的時候讀取,同時表中的資料将會根據這兩個檔案中的内容進行重建。不像臨時表,這種類型的表是長期存在的。我們定義的記憶體表在資料庫被打開的時候,所有表中的資料将會被讀取和替換。這個過程将會耗費比較長的時間

,如果表的資料量超過幾十兆位元組的時候。當資料庫關閉的時候,所有資料将會被儲存,這個過程同樣也會消耗很長時間。

CACHED 表使用指令 CREATE CACHED TABLE

指令進行建立。表中的部分資料和索引将會被加載到記憶體中。這種表允許存儲大量的資料而不需要将表中的所有資料都加載到記憶體中。另外的好處是,在資料庫啟動

的時候,資料庫引擎隻對表中的少量資料進行索引,這樣能夠加快處理速度也能讓表存儲更多人内容。但是,這種類型的表将會降低處理速度,如果你的資料量非常

小,請不要使用這種類型的表。如果在一個應用

程式

中包含有一些大資料量的表和小資料量的表,最好預設将所有的小表采用記憶體模式。

TEXT 表使用 CSV 或者其他逗号分隔符來存儲其資料。你可以指定一個已經存在的 CSV

檔案,這個檔案可以是從其他資料庫或者程式裡面導出的。或者,你可以使用一個空的資料檔案,然後使用資料庫引擎将資料導入到這個檔案中。TEXT

表對記憶體的使用非常有效,因為這種類型的表之緩存部分資料到記憶體,但是這種表會緩存所有索引到記憶體中。如果必要的話,TEXT

表中的内容可以被任意指定。如何設定 TEXT 表的具體内容在 Text 表設定的章節中讨論。

在全記憶體的資料庫中 MEMORY 和 CACHED 表被聲明為非持久的記憶體表。TEXT 表不能被聲明為這種表。

建立表的中的預設類型可以用下面的指令進行定義,這樣使用 CREATE TABLE 指令建立的表将會使用資料庫預設定義的類型中進行定義:

SET DATABASE DEFAULT TABLE TYPE { CACHED | MEMORY };如果你希望修改已經存在表的類型,你可以用下面的指令:

SET TABLE <table name> TYPE { CACHED | MEMORY };在 SQL 語句中對不同類型的表進行通路,你不需要在你的 SQL 語句中指定表的類型。

LOB 資料

Lob 資料為存儲在資料庫表裡面的邏輯列。這些資料的實體存儲是在檔案系統中以 *.lobs 為字尾名的檔案。在 HSQLDB 2.0 中,這個檔案在 BLOB 或 CLOB 字段

被插入到表中的時候被建立。這個檔案将會作為一個持續增長的檔案而被插入到資料庫中。在 HSQLDB 的 2.0 版本中, 盡管你的資料庫中的所有 LOB 資料被删除

了, *.lobs 也不會被删除。當你确定所有 LOB 資料被删除後,你可以在資料庫引擎被關閉後手工删除 *.lobs 檔案。

http://www.ossez.com/viewthread.php?tid=6826&fromuid=426