↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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.2 已结束支持。 请参阅 当前版本手册.

INSERT

INSERT — 在一个表中创建新行

大纲

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

输入

table

一个已存在表的名称。

column

table中一个列的名称。

DEFAULT VALUES

所有列都将用 NULL 或创建表时用 DEFAULT 子句指定的值填充。

expression

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

query

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

输出

INSERT oid 1

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

INSERT 0 #

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

描述

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

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

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

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

用法

向表 films 插入一行:

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

在第二个例子中,省略了最后一列 len,因此它将使用默认值 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中。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.