↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

INSERT

INSERT — 向一个表中插入新行

大纲

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

输入

table

一个已存在表的名称。

column

table中一个列的名称。

expression

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

query

一个有效的查询。有效参数的进一步描述请参考 SELECT 语句。

输出

INSERT oid 1

只插入了一行时返回的消息。→ oid 是被插入行的数字 OID。

INSERT 0 #

插入了多行时返回的消息。→ # 是插入的行数。

描述

INSERT允许我们向一个类或表中插入新行。可以一次插入一行,也可以插入一个查询结果的多个行。目标列表中的列可以按任意顺序列出。

目标列表中没有出现的每个列将使用默认值插入,即声明的 DEFAULT 值或 NULL。如果向声明为 NOT NULL 的列插入 NULL,Postgres将拒绝这个新列。

如果每个列的表达式数据类型不正确,将尝试自动类型强制转换。

要向一个表追加数据,你必须拥有该表上的 insert 权限,并且对 WHERE 子句中指定的任何表拥有 select 权限。

用法

向表 films 插入一行:

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

在第二个例子中,列 date_prod 被省略,因此它将使用默认值 NULL:

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

向表 distributors 插入一行;注意只指定了列 name,因此被省略的列 did 将被赋予其默认值:

INSERT INTO distributors (name) VALUES ('British Lion');
   

从表 tmp 向表 films 插入若干行:

INSERT INTO films SELECT * FROM tmp;
   

插入数组(关于数组的更多信息请参考PostgreSQL User's Guide):

-- Create an empty 3x3 gameboard for noughts-and-crosses
-- (all of these queries create the same board attribute)
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,'{{,,},{,,},{,,}}');
   

兼容性

SQL92

INSERT与SQL92完全兼容。query子句特性方面可能存在的限制记录在 SELECT 中。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。