5.2. 缺省值

一个字段可以赋予缺省值。如果新创建了一个数据行,而有些字段的数值没有声明,那么这些字段将被填充与它们各自的缺省值。 一条数据修改命令也可以明确地要求把一个字段设置成为它地缺省值, 而不用事先知道这个数值是什么。(有关数据操作的命令在 Chapter 6。)

如果没有明确声明缺省值,那么缺省值是空。 这么做通常是合理的,因为空值可以认为代表未知数据。

在一个表定义里,缺省值是在字段数据类型后面列出。比如:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric DEFAULT 9.99
);

缺省值可以是一个表达式,它会在插入缺省值的时候计算(不是创建表的时候)。 一个常见的例子是一个 timestamp 字段可能有缺省值 now(), 这样它就设置为插入行的时刻。 另外一个常见的例子是为每一行生成一个"序列号"。 在 PostgreSQL 里,通常是用类似下面这样的东西生成的

CREATE TABLE products (
    product_no integer DEFAULT nextval('products_product_no_seq'),
    ...
);

这里的 nextval() 从一个序列对象 (参阅 Section 9.12)提供后继的数值。 这种做法非常普遍,以至于我们有一个特殊的缩写用于此目的:

CREATE TABLE products (
    product_no SERIAL,
    ...
);

SERIAL 缩写在Section 8.1.4 里有进一步描述。