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