INSERT(7)

NAME
INSERT - 在表中创建新行

SYNOPSIS

INSERT INTO table [ ( column [, ...] ) ]
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }

DESCRIPTION 描述

INSERT 允许我们向表中插入新行。 我们可以一次插入一行或多行作为查询结果。

 目标列表中的列/字段可以按任何顺序排列。 在目标列中没有出现的列/字段将插入缺省值， 可能是定义了的缺省值或者 NULL。

 如果每行的表达式不是正确的数据类型，系统将试图进行自动的类型转换。

 要想向表中插入数据，你必须有 INSERT 权限， 如果你使用了 query 子句插入来自查询里的数据行， 你还需要拥有在查询里使用的表的 SELECT 权限。

PARAMETERS 参数

table
     现存表的名称（可以有模式修饰）。

column
     表 table 中的字段名。

DEFAULT VALUES
     所有字段都会用它们的缺省值填充。

expression
     赋予 column 的一个有效表达式或值。

DEFAULT
     这个字段将被字段它的填充。

query
     一个查询（SELECT 语句），它提供插入的数据行。 请参考 SELECT 语句获取语法描述。

OUTPUTS 输出

 成功完成后，一条 INSERT 命令返回一个下面形式的命令标签

INSERT oid count

count 是插入的行数。 如果 count 正好是一，并且目标表有 OID， 那么 oid 是赋予插入行的 OID。 否则 oid 是零。

EXAMPLES 例子

 向表 films 里插入一行：

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');

 在第二个例子里面省略了字段 len 因此在它里面将只存储缺省的 NULL 值：

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

 在第三个例子里，我们用 DEFAULT 值作为数据字段，而不是声明一个数值：

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes');
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');

 从表 tmp 中插入几行到表 films 中：

INSERT INTO films SELECT * FROM tmp;

 插入数组：

-- 创建一个空的 3x3 游戏板来玩圈-和-叉游戏
-- (所有这些查询创建相同的游戏)
INSERT INTO tictactoe (game, board[1:3][1:3])
    VALUES (1,'{{"","",""},{},{"",""}}');
INSERT INTO tictactoe (game, board[3][3])
    VALUES (2,'{}');
INSERT INTO tictactoe (game, board)
    VALUES (3,'{{,,},{,,},{,,}}');

COMPATIBILITY 兼容性

INSERT 完全遵循 SQL 标准。可能碰到的关于 query 子句特性的限制在 SELECT [select(7)] 语句中有相关文档。

译者
Postgresql 中文网站 何伟平 <laser@pgsqldb.org>