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