pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
上一章讨论了如何创建表以及其他用来保存数据的结构。现在该向表中 填充数据了。本章介绍如何插入、更新和删除表中的数据。我们还 介绍在特定事件发生时实现自动数据更改的方法:触发器和重写 规则。下一章将最终解释如何把你久违的数据从数据库中提取出来。
表创建时不包含任何数据。在数据库能派上用场之前,首先要做的 事情就是插入数据。从概念上讲,数据是一次一行地插入的。当然 你也可以一次插入多行,但没有办法一次插入不到一行的数据。 即使你只知道某些列的值,也必须创建一个完整的行。
要创建一个新行,使用INSERT命令。该命令 需要表名以及表中每一列的一个值。例如,考虑第 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;
要做“批量装载”,也就是插入大量数据,可以看看 COPY命令。它不如INSERT 命令灵活,但效率更高。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。