提要:通过本教程,你将学会如何使用 PostgreSQL 的 INSERT 语句,往数据表里插入数据。

创建新表之后,这个表里并没有任何数据。你要做的第一件事,可能就是往表里插入新数据。PostgreSQL 提供了 INSERT 语句,允许你在同一时间往表插入单条或多条数据。

PostgreSQL INSERT 语法

下面是 INSERT 语句的语法:

INSERT INTO table(column1, column2, )
VALUES
 (value1, value2, );

首先,在 INSERT INTO 之后指定要插入数据的表的名字,然后是以逗号分隔的字段列表。

然后,在 VALUES 后面输入值列表。值列表中的数量、顺序、数据类型必须和字段列表保持一致。

要同时插入多条记录,可以使用以下语法:

INSERT INTO table (column1, column2, )
VALUES
 (value1, value2, ),
 (value1, value2, ) ,...;

你只需要在第一个值列表后面加上更多的值列表。值列表之间也是用逗号分隔。

还可以使用 INSERT INTO SELECT 语句,插入另一张表里数据:

INSERT INTO table(value1,value2,...)
SELECT column1,column2,...
FROM another_table
WHERE condition;

WHERE 用于过滤从另一张表里插入到当前表的数据。

PostgreSQL INSERT 示例

我们创建一个名为 link 的新表来做演示:

CREATE TABLE link (
 ID serial PRIMARY KEY,
 url VARCHAR (255) NOT NULL,
 name VARCHAR (255) NOT NULL,
 description VARCHAR (255),
 rel VARCHAR (50)
);

你将在后面的课程里学到创建表的详细知识,现在你只需要执行上面的语句就行了。

插入单条数据

下面的代码用于往 link 表里插入一条新数据:

INSERT INTO link (url, name)
VALUES
 ('https://pg.sjk66.com','PostgreSQL轻松学');

在插入字符串时,需要将字符串放在一对单引号之间,对于数字,不需要加引号,直接写就行了。

如果在插入时省略了那些允许 NULL 的字段,这些字段将会使用 NULL 作为默认值。

PostgreSQL 会自动为 serial 字段提供值,所以在插入的时候不需要给该字段设置值。

现在,可以用 SELECT 语句来验证插入了:

SELECT
 *
FROM
 link;

结果如下:

select from link

插入多条数据

下面演示了如何同时插入多条记录:

INSERT INTO link 
    (url, name)
VALUES
    ('https://sjk66.com', '数据库轻松学'),
    ('https://mysql.sjk66.com', 'MySQL轻松学'),
    ('https://perl.sjk66.com', 'Perl轻松学')
;

验证一下:

select from link

插入日期

我们先给 link 表添加一个名为 last_update 的字,并将它的默认值设置为 CURRENT_DATE

ALTER TABLE link ADD COLUMN last_update DATE;

ALTER TABLE link ALTER COLUMN last_update
SET DEFAULT CURRENT_DATE;

然后,我们再插入一条新数据,使用 '2017-12-31' 作为 last_update 的值:

INSERT INTO link (url, name, last_update)
VALUES
 ('https://www.ivix.me','IVIX','2017-12-31');

插入后,数据表中的数据如下:

insert date

当然,也可以使用字段的默认值来插入:

INSERT INTO link (url, name, last_update)
VALUES
 ('https://wrdll.com','WRDLL.COM', DEFAULT);

insert date default

从其它表中插入数据

首先,我们创建一个名为 link_tmp 的表,它和 link 表有相同的结构:

CREATE TABLE link_tmp (LIKE link);

然后,我们从 link 中获取 last_update 不为空的数据,插入到 link_tmp 表:

INSERT INTO link_tmp 
SELECT
 *
FROM
 link
WHERE
 last_update IS NOT NULL;

获取最后插入的id

通过使用 RETURNING 子句,可以在表中获取最后插入的数据的id。这是 PostgreSQL 对标准 SQL 的一个扩展。下面的例子就是插入一条记录,并获取它的id:

INSERT INTO link (url, NAME, last_update)
VALUES('http://www.postgresql.org','PostgreSQL',DEFAULT) 
RETURNING id;

结果是:

id
------------
7
上一篇:PostgreSQL的ANY
下一篇:PostgreSQL的UPDATE