天天看點

PostgreSQL 10.1 手冊_部分 II. SQL 語言_第 5 章 資料定義_5.1. 表基礎

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中文社群,原文連結: