關聯式資料庫中的表格很像紙上的表格:由列和欄組成。欄的數量和順序是固定的,而且每欄都有一個名稱。列的數量是可變的 — 它反映了在給定時刻儲存了多少資料。SQL 不保證表格中列的順序。讀取表格時,除非明確要求排序,否則列將以未指定的順序顯示。這將在第 7 章中介紹。此外,SQL 不會為列分配唯一識別符,因此表格中可能存在多個完全相同的列。這是 SQL 底層數學模型的結果,但通常是不希望發生的。在本章的稍後部分,我們將看到如何處理這個問題。
每欄都有資料類型。資料類型限制了可以分配給欄的一組可能值,並為儲存在欄中的資料分配語意,以便可以用於計算。例如,宣告為數值類型的欄將不接受任意文字字串,並且儲存在此類欄中的資料可以用於數學計算。相反,宣告為字元字串類型的欄將接受幾乎任何類型的資料,但它不適合進行數學計算,儘管可以使用其他操作,例如字串串連。
PostgreSQL 包含大量內建資料類型,可滿足許多應用程式的需求。使用者也可以定義自己的資料類型。大多數內建資料類型都有明顯的名稱和語意,因此我們將詳細說明推遲到第 8 章。一些常用的資料類型包括用於整數的integer
、用於可能包含小數的數字的numeric
、用於字元字串的text
、用於日期的date
、用於一天中時間值的time
,以及用於包含日期和時間的值的timestamp
。
要建立表格,可以使用名為 CREATE TABLE 的指令。在此指令中,您至少需要指定新表格的名稱、欄的名稱以及每欄的資料類型。例如
CREATE TABLE my_first_table ( first_column text, second_column integer );
這會建立一個名為 my_first_table
的表格,其中包含兩個欄。第一欄名為 first_column
,資料類型為 text
;第二欄名為 second_column
,類型為 integer
。表格和欄名稱遵循第 4.1.1 節中說明的識別符語法。類型名稱通常也是識別符,但也有一些例外。請注意,欄清單以逗號分隔,並用括號括起來。
當然,前面的範例是經過精心設計的。通常,您會為表格和欄指定名稱,以傳達它們儲存的資料類型。因此,讓我們看一個更實際的例子
CREATE TABLE products ( product_no integer, name text, price numeric );
(numeric
類型可以儲存小數部分,就像貨幣金額的典型情況一樣。)
當您建立許多相互關聯的表格時,明智的做法是為表格和欄選擇一致的命名模式。例如,可以選擇對表格名稱使用單數或複數名詞,這兩種方式都受到某些理論家的青睞。
表格可以包含的欄數有限制。根據欄類型,介於 250 到 1600 之間。但是,定義一個接近如此多欄的表格非常不尋常,而且通常是一個有問題的設計。
如果您不再需要某個表格,可以使用 DROP TABLE 指令將其刪除。例如
DROP TABLE my_first_table; DROP TABLE products;
嘗試刪除不存在的表格會產生錯誤。儘管如此,在 SQL 指令檔中,通常會無條件地嘗試在建立每個表格之前將其刪除,而忽略任何錯誤訊息,以便無論該表格是否存在,指令檔都可以運作。(如果您願意,可以使用 DROP TABLE IF EXISTS
變體來避免錯誤訊息,但這不是標準 SQL。)
如果您需要修改已存在的表格,請參閱本章後面的第 5.7 節。
透過目前所討論的工具,您可以建立功能完整的資料表。本章的其餘部分將著重於在資料表定義中加入額外的功能,以確保資料的完整性、安全性或便利性。如果您現在迫不及待想用資料填滿您的資料表,您可以跳到第 6 章,稍後再閱讀本章的其餘部分。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。