Chapter 6. 資料操作

Table of Contents
6.1. 插入資料
6.2. 更新資料
6.3. 刪除資料

前面的章節討論了如何建立儲存您的資料的資料表和其他結構。 現在是給資料表填充資料的時候了。本章介紹如何插入,更新和刪除資料表資料。 我們還將介紹在一些事件發生的時候可以自動影響資料變化的方法: 觸發器器和重寫規則。在下一章將最終解釋如何把您丟失已久的資料從資料庫中抽取出來。

6.1. 插入資料

在建立一個資料表的時候,它裡面沒有資料。在資料庫可以有點用之前 要做的第一件事就是向裡面插入資料。資料在概念上是每次一行地插入的。 我們當然可以每次插入多行, 但是的確沒有辦法一次插入少於一行的資料。即使您只知道幾個字串 的數值,那麼您也必須建立一個完整的行。

要建立一個新行,我們使用 INSERT 命令。 這條命令要求提供資料表名字和給資料表中每個字串提供一個數值。 比如,假設來自 Chapter 5 的產品資料表:

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

下面是一個向資料表中插入一行的例子:

INSERT INTO products VALUES (1, 'Cheese', 9.99);

資料值是按照這些字串在資料表中出現的順序列出的,並且用逗號分隔。 通常,資料值是文本(常量),但也允許使用標量資料表達式。

上面的語法的缺點是您必須知道資料表中字串的順序。要避免這個問題, 您也可以明確地列出字串。比如,下面的兩條命令都有和上面那條 命令一樣的效果:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

許多用戶認為明確列出字串名字是個好習慣。

如果您沒有獲得所有字串的數值,那麼您可以省略其中的一些。 這個時候,這些字串將被填充為它們的預設數值。比如,

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');

第二種形式是 PostgreSQL 的一個擴展。 它從左開始填充我們給出的數值個數的字串數,其他的將是預設。

為了保持清晰,您也可以明確要求預設值,用於獨立的字串或者用於 整個行:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

提示: 要進行"批量裝載",也就是說,插入大量資料, 我們可以看看 COPY 命令。 它不像 INSERT 命令那麼靈活,但是更高效。