↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 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 7.3.21 参考手册)。它不如INSERT 命令灵活,但更高效。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。