pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
INSERT — 在表中插入新行
INSERT INTOtable[ (column[, ...] ) ] { DEFAULT VALUES | VALUES ( {expression| DEFAULT } [, ...] ) |query}
INSERT将新行插入表中。可以插入由值表达式指定的 单个行,也可以插入作为查询结果的多行。
目标列名可以按任意顺序列出。如果根本未给出列名列表,则默认使用按 声明顺序排列的全部列;或者如果VALUES子句或 query只提供了N列, 则默认使用按声明顺序排列的前N个列名。 VALUES子句或query 提供的值,会按从左到右的顺序与显式或隐式列列表对应起来。
任何未出现在显式或隐式列列表中的列都会填入默认值;如果没有声明默认 值,则填入空值。
如果任何列的表达式数据类型不正确,将尝试自动进行类型转换。
要向表中插入行,必须具有该表上的INSERT权限。 如果使用query子句从查询中插入行,还需要在查询使用的任何表上具有SELECT权限。
table现有表的名称(可选地使用模式限定)。
columntable 中某一列的名称。如有需要,列名可以用子字段名或数组下标限定。(只向组合列的某些字段插入时,其余字段保持为空。)
DEFAULT VALUES所有列都会填入各自的默认值。
expression要赋予对应 column 的表达式或值。
DEFAULT对应的 column 将用它的默认值填充。
query提供要插入行的查询(SELECT语句)。其语法 说明请参见SELECT命令。
成功完成时,INSERT 命令返回以下形式的命令标签:
INSERToidcount
其中,count 是插入的行数。如果 count 恰好为一,且目标表有 OID,则 oid 表示分配给插入行的 OID。该单行必须是插入的,而不是更新的。否则 oid 为零。
向表films插入一行:
INSERT INTO films VALUES
('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');
在这个示例中,省略了len列,因此它将取默认值:
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');
要插入一行,其所有列都由默认值构成:
INSERT INTO films DEFAULT VALUES;
这个示例从与films列布局相同的 tmp_films表中选出一些行并插入到 films表:
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
这个示例向数组列插入值:
-- Create an empty 3x3 gameboard for noughts-and-crosses
-- (these commands create the same board)
INSERT INTO tictactoe (game, board[1:3][1:3])
VALUES (1,'{{"","",""},{"","",""},{"","",""}}');
INSERT INTO tictactoe (game, board)
VALUES (2,'{{,,},{,,},{,,}}');
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。