历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.
第 6 章 数据操纵
上一章讨论了如何创建表以及其他用来保存数据的结构。现在该向表中填充数据了。本章介绍如何插入、更新和删除表中的数据。我们还介绍在特定事件发生时实现自动数据更改的方法:触发器和重写规则。下一章将最终解释如何把你久违的数据从数据库中提取出来。
6.1. 插入数据 #
表创建时不包含任何数据。在数据库能派上用场之前,首先要做的事情就是插入数据。从概念上讲,数据是一次一行地插入的。当然你也可以一次插入多行,但没有办法一次插入不到一行的数据。即使你只知道某些列的值,也必须创建一个完整的行。
要创建一个新行,使用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
命令灵活,但效率更高。