On this page
6.1. 插入数据
创建表时,它不包含任何数据。在数据库可以大量使用之前,要做的第一件事是插入数据。从概念上讲,数据一次只能插入一行。当然,您也可以插入多行,但是无法插入少于一行。即使您只知道某些列值,也必须创建完整的行。
要创建新行,请使用INSERT命令。该命令需要表名称和列值。例如,考虑来自Chapter 5的产品表:
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
插入行的示例命令为:
INSERT INTO products VALUES (1, 'Cheese', 9.99);
数据值以列在表格中出现的 Sequences 列出,并用逗号分隔。通常,数据值将是 Literals(常量),但也可以使用标量表达式。
上面的语法的缺点是您需要知道表中列的 Sequences。为避免这种情况,您还可以显式列出这些列。例如,以下两个命令与上面的命令具有相同的效果:
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 查询机制(Chapter 7)的全部功能,可用于计算要插入的行。
Tip
同时插入大量数据时,请考虑使用COPY命令。它不像INSERT命令那么灵活,但是效率更高。有关改善批量加载性能的更多信息,请参考Section 14.4。