↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本。 PostgreSQL 7.3 已结束支持。 请参阅 当前版本手册.

第 3 章 数据操纵

上一章讨论了如何创建表以及其他用来保存数据的结构。现在该向表中填充数据了。本章介绍如何插入、更新和删除表中的数据。我们还介绍在特定事件发生时实现自动数据更改的方法:触发器和重写规则。下一章将最终解释如何把你久违的数据从数据库中提取出来。

3.1. 插入数据 #

表创建时不包含任何数据。在数据库能派上用场之前,首先要做的事情就是插入数据。从概念上讲,数据是一次一行地插入的。当然你也可以一次插入多行,但没有办法一次插入不到一行的数据。即使你只知道某些列的值,也必须创建一个完整的行。

要创建一个新行,使用INSERT命令。该命令需要表名以及表中每一列的一个值。例如,考虑第 2 章中的 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;

提示

要做“批量装载”,也就是插入大量数据,可以看看 COPY命令(见 PostgreSQL 参考手册)。它不如INSERT 命令灵活,但更高效。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.