插入数据

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 6. 数据操作 | 下一页

# 6.1. 插入数据

在创建完一个表的时候，它里面没有数据。 在数据库可以有点用处之前要做的第一件事就是向里面插入数据。 数据在概念上是每次插入一行。我们当然可以每次插入多行， 但是确实没有办法插入少于一行的数据。即使你只知道几个字段的数值， 那么你也必须创建一个完整的行。

使用INSERT命令创建一个新行。 这条命令要求提供表名字以及字段值。比如， 考虑来自第 5 章的产品表：

    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);

> 提示: 要一次插入大量数据，可以看看COPY命令。 它不像INSERT命令那么灵活，但是更高效。 参考第 14.4 节获取更多有关提高海量数据载入性能的信息。

上一页 | 起始页 | 下一页
数据操作 | 上一级 | 更新数据