Table of Contents
前一章讨论了如何创建用于保存数据的表和其他结构。现在该把数据填入表中了。本章介绍如何插入、更新和删除表数据。下一章则终于会讲到如何从数据库中取回那些久寻不得的数据。
创建表时,其中不包含任何数据。在数据库真正派上用场之前,首先要做的就是插入数据。数据一次插入一行。你也可以在一条命令中插入多行,但不能插入不完整的行。即使只知道部分列值,也必须创建完整的一行。
要创建新行,可使用INSERT 命令。该命令需要提供表名和列值。例如,考虑Chapter 5中的 products 表:
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 查询机制的全部能力(见Chapter 7)来计算要插入的行。
当需要一次插入大量数据时,可以考虑使用 COPY命令。 它不像INSERT 命令那样灵活,但效率更高。关于如何改善批量装载性能的更多信息,请参阅Section 14.4。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。