?
Ce document utilise Manuel du site Web PHP chinois Libérer
關(guān)系型數(shù)據(jù)庫中的表非常類似紙面上的一張表:它由行和列組成。字段的數(shù)目是固定的, 每個字段都有一個名字。行的數(shù)目是變化的(它反映了任意時刻存儲的數(shù)據(jù)量)。 SQL 對行的順序沒有任何承諾(除非你明確地要求排序)。這些內(nèi)容在Chapter 7里介紹。另外, SQL 并不給行賦予唯一的標(biāo)識,因此我們很可能在一個表中有好幾個完全相同的行。 這是作為 SQL 基礎(chǔ)的下層數(shù)學(xué)模型的必然結(jié)果,但是這通常是我們不愿意看到的。 本章稍后的部分將討論如何處理這個問題。
每個字段都有一個數(shù)據(jù)類型。數(shù)據(jù)類型控制著一個字段所有可能值的集合,并且控制著 字段中數(shù)據(jù)的語義,這樣它就可以用于計算。比如,一個聲明為數(shù)值類型的字段不會接受 任意文本字符串,而存儲在這種字段里的數(shù)據(jù)可以用于數(shù)學(xué)計算。相比之下,一個聲明為 字符串類型的字段接受幾乎任意類型的數(shù)據(jù),但是它們不能進行數(shù)學(xué)計算(不過可以進行 像字符串連接之類的操作)。
PostgreSQL 包含一套可剪裁的內(nèi)置數(shù)據(jù)類型,這些類型 可以適用于許多應(yīng)用。用戶也可以定義它們自己的數(shù)據(jù)類型。大多數(shù)內(nèi)置的數(shù)據(jù)類型有 顯而易見的名字和語義,因此我們把詳細(xì)的解釋放在了Chapter 8。 常用的數(shù)據(jù)類型有:用于整數(shù)的integer、用于可能為分?jǐn)?shù)的numeric 、 用于字符串的text、用于日期的date 、用于時間的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; 第二個字段的名字遵循Section 4.1.1里面解釋的標(biāo)識符語法。 類型名通常也是標(biāo)識符(但是有一些例外)。 請注意字段 列表是逗號分隔的,并且用圓括弧包圍。
當(dāng)然,前面只是一個非常虛構(gòu)的例子。通常,你會給表和字段取一個有意義的名字, 所以還是讓我們給一個比較現(xiàn)實的例子:
CREATE TABLE products ( product_no integer, name text, price numeric );
numeric 類型可以存儲分?jǐn)?shù)部分,金額很可能有這樣的分?jǐn)?shù)部分。
Tip: 如果你創(chuàng)建了許多相互關(guān)聯(lián)的表,那么最好為表和字段選擇一致的命名模式。 比如,表名字可以統(tǒng)一選擇單數(shù)或者復(fù)數(shù),兩種選擇都有這樣那樣的理論家支持。
一個表能包含的字段數(shù)目是有限制的。根據(jù)字段類型的不同,這個數(shù)目可能在 250 到 1600 之間。不過,不管是哪一端的數(shù)字,如果你設(shè)計的表包含那么多 的字段好像都很不可能發(fā)生,否則是設(shè)計上有問題的表現(xiàn)。
如果你不再需要一個表,那么可以用DROP TABLE命令刪除它。像這樣:
DROP TABLE my_first_table; DROP TABLE products;
試圖刪除一個不存在的表是一個錯誤。不過,在 SQL 腳本文件里,我們通常在創(chuàng)建表 之前無條件刪除它并忽略錯誤信息。(當(dāng)然你還可以使用DROP TABLE IF EXISTS 來避免警告信息,不過這并不符合 SQL 標(biāo)準(zhǔn)。)
如果你需要修改一個已經(jīng)存在的表,那么可以看看本章稍后的Section 5.5 。
使用到目前為止討論的工具我們可以創(chuàng)建功能完整的表。本章剩下的部分是 有關(guān)向表定義中增加特性、保證數(shù)據(jù)完整性、安全性或便利性的內(nèi)容。如果 你急于給表填充數(shù)據(jù),那么你可以忽略余下的部分直接到Chapter 6, 然后在稍后的時候再回來閱讀本章。