天天看點

PostgreSQL 10.1 手冊_部分 II. SQL 語言_第 6 章 資料操縱_6.1. 插入資料

6.1. 插入資料

當一個表被建立後,它不包含資料。在資料庫可以有點用之前要做的第一件事就是向裡面插入資料。資料在概念上是以每次一行地方式被插入的。你當然可以每次插入多行,但是卻沒有辦法一次插入少于一行的資料。即使你隻知道幾個列的值,那麼你也必須建立一個完整的行。

要建立一個新行,使用

INSERT

指令。這條指令要求提供表的名字和其中列的值。例如,考慮

第 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;      

你可以在一個指令中插入多行:

INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);      

也可以插入查詢的結果(可能沒有行、一行或多行):

INSERT INTO products (product_no, name, price)
  SELECT product_no, name, price FROM new_products
    WHERE release_date = 'today';      

這提供了用于計算要插入的行的SQL查詢機制(

第 7 章

)的全部功能。

提示

在一次性插入大量資料時,考慮使用

COPY

指令。它不如

指令那麼靈活,但是更高效。 參考

第 14.4 節

擷取更多有關批量裝載性能的資訊。

本文轉自PostgreSQL中文社群,原文連結: