PostgreSQL 表基礎(chǔ)

2021-08-26 09:51 更新

關(guān)系型數(shù)據(jù)庫中的一個表非常像紙上的一張表:它由行和列組成。列的數(shù)量和順序是固定的,并且每一列擁有一個名字。行的數(shù)目是變化的,它反映了在一個給定時刻表中存儲的數(shù)據(jù)量。SQL并不保證表中行的順序。當(dāng)一個表被讀取時,表中的行將以非特定順序出現(xiàn),除非明確地指定需要排序。這些將在第 7 章介紹。此外,SQL不會為行分配唯一的標識符,因此在一個表中可能會存在一些完全相同的行。這是SQL之下的數(shù)學(xué)模型導(dǎo)致的結(jié)果,但并不是所期望的。稍后在本章中我們將看到如何處理這種問題。

每一列都有一個數(shù)據(jù)類型。數(shù)據(jù)類型約束著一組可以分配給列的可能值,并且它為列中存儲的數(shù)據(jù)賦予了語義,這樣它可以用于計算。例如,一個被聲明為數(shù)字類型的列將不會接受任何文本串,而存儲在這樣一列中的數(shù)據(jù)可以用來進行數(shù)學(xué)計算。反過來,一個被聲明為字符串類型的列將接受幾乎任何一種的數(shù)據(jù),它可以進行如字符串連接的操作但不允許進行數(shù)學(xué)計算。

PostgreSQL包括了相當(dāng)多的內(nèi)建數(shù)據(jù)類型,可以適用于很多應(yīng)用。用戶也可以定義他們自己的數(shù)據(jù)類型。大部分內(nèi)建數(shù)據(jù)類型有著顯而易見的名稱和語義,所以我們將它們的詳細解釋放在第 8 章中。一些常用的數(shù)據(jù)類型是:用于整數(shù)的integer;可以用于分數(shù)的numeric;用于字符串的text,用于日期的date,用于一天內(nèi)時間的time以及可以同時包含日期和時間的timestamp。

要創(chuàng)建一個表,我們要用到CREATE TABLE命令。在這個命令中 我們需要為新表至少指定一個名字、列的名字及數(shù)據(jù)類型。例如:

CREATE TABLE my_first_table (
    first_column text,
    second_column integer
);

這將創(chuàng)建一個名為my_first_table的表,它擁有兩個列。第一個列名為first_column且數(shù)據(jù)類型為text;第二個列名為second_column且數(shù)據(jù)類型為integer。表和列的名字遵循第 4.1.1 節(jié)中解釋的標識符語法。類型名稱通常也是標識符,但是也有些例外。注意列的列表由逗號分隔并被圓括號包圍。

當(dāng)然,前面的例子是非常不自然的。通常,我們?yōu)楸砗土匈x予的名稱都會表明它們存儲著什么類別的數(shù)據(jù)。因此讓我們再看一個更現(xiàn)實的例子:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

numeric類型能夠存儲小數(shù)部分,典型的例子是金額。)

提示

當(dāng)我們創(chuàng)建很多相關(guān)的表時,最好為表和列選擇一致的命名模式。例如,一種選擇是用單數(shù)或復(fù)數(shù)名詞作為表名,每一種都受到一些理論家支持。

一個表能夠擁有的列的數(shù)據(jù)是有限的,根據(jù)列的類型,這個限制介于250和1600之間。但是,極少會定義一個接近這個限制的表,即便有也是一個值的商榷的設(shè)計。

如果我們不再需要一個表,我們可以通過使用DROP TABLE命令來移除它。例如:

DROP TABLE my_first_table;
DROP TABLE products;

嘗試移除一個不存在的表會引起錯誤。然而,在SQL腳本中在創(chuàng)建每個表之前無條件地嘗試移除它的做法是很常見的,即使發(fā)生錯誤也會忽略之,因此這樣的腳本可以在表存在和不存在時都工作得很好(如果你喜歡,可以使用DROP TABLE IF EXISTS變體來防止出現(xiàn)錯誤消息,但這并非標準SQL)。

如果我們需要修改一個已經(jīng)存在的表,請參考本章稍后的第 5.6 節(jié)。

利用到目前為止所討論的工具,我們可以創(chuàng)建一個全功能的表。本章的后續(xù)部分將集中于為表定義增加特性來保證數(shù)據(jù)完整性、安全性或方便。如果你希望現(xiàn)在就去填充你的表,你可以跳過這些直接去第 6 章


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號