INSERT

Name

INSERT  --  在表中创建新行

Synopsis

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

输入

table

现存表的名称(可以有模式修饰).

column

table 中的列/字段名.

DEFAULT VALUES

所有字段都会用NULL或者创建表时用DEFAULT子句声明的值填充.

expression

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

DEFAULT

这个字段将被字段 DEFAULT 字句填充,或者是如果没有缺省的话就 填充 NULL.

query

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

输出

INSERT oid 1

如果只插入了一行,返回此信息. oid OID 是被插入行的数字标识.

INSERT 0 #

如果插入了超过一行,返回此信息. # 是插入的行数.

描述

INSERT 允许我们向表中插入新行. 我们可以一次插入一行或多行作为查询结果. 目标列表中的列/字段可以按任何顺序排列.

在目标列中没有出现的列/字段将插入缺省值, 要么是定义了的 DEFAULT 值或者 NULL。 如果向定义为 NOT NULL 的列中插入 NULL 值, PostgreSQL 将拒绝新列。

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

要想向表中插入数据,你必须有插入权限, 同样也要有选择权限用于处理 WHERE 子句里声明的任何表。

用法

向表 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');
   

在第三给例子里,我们用 DEFAULT 值作为数据字段,而不是声明一条记录.

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

向表 distributors 里插入一行;注意只声明了字段 name ,而没有声明的字段 did 将被赋于它的缺省值:

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

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

INSERT INTO films SELECT * FROM tmp;
   

插入数组(请参考 PostgreSQL 用户手册 获取关于数组的更多信息):

-- 创建一个空的 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,'{{,,},{,,},{,,}}');
   

兼容性

SQL92

INSERT 语句与 SQL92完全兼容. 可能碰到的关于 query 子句特性的限制在 SELECT. 语句中有相关文档.