5.1. 表基礎
關系型資料庫中的一個表非常像紙上的一張表:它由行和列組成。列的數量和順序是固定的,并且每一列擁有一個名字。行的數目是變化的,它反映了在一個給定時刻表中存儲的資料量。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.5 節利用到目前為止所讨論的工具,我們可以建立一個全功能的表。本章的後續部分将集中于為表定義增加特性來保證資料完整性、安全性或友善。如果你希望現在就去填充你的表,你可以跳過這些直接去
第 6 章本文轉自PostgreSQL中文社群,原文連結: