PostgreSQL 教程: INSERT

九月 4, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的INSERT语句向表中插入新行。

PostgreSQL INSERT 语句简介

PostgreSQL 的INSERT语句允许您将新行插入表中。

下面说明了INSERT语句最基本的语法:

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

在这个语法中:

  • 首先,在INSERT INTO关键字后,指定要插入数据的表的名称 (table_name) 以及逗号分隔列的列表 (colum1, column2, ....)。
  • 其次,在VALUES关键字后面的括号中提供逗号分隔值的列表 (value1, value2, ...)。列和值列表中的列和值必须具有相同的顺序。

INSERT语句返回一个命令标记,格式如下:

INSERT oid count

OID是一个对象标识符。PostgreSQL在内部使用OID作为其系统表的主键。通常,INSERT语句返回OID值 0。countINSERT语句成功插入的行数。

RETURNING 子句

INSERT语句还有一个可选的RETURNING子句,用于返回插入行的信息。

如果要返回整个插入行,请在RETURNING关键字后使用星号 (*):

INSERT INTO table_name(column1, column2, )
VALUES (value1, value2, )
RETURNING *;

如果只想返回插入行的部分信息,可以在RETURNING子句后指定一列或多列。

例如,以下语句返回插入行的id

INSERT INTO table_name(column1, column2, )
VALUES (value1, value2, )
RETURNING id;

要重命名返回值,请使用AS关键字,后跟输出名称。例如:

INSERT INTO table_name(column1, column2, )
VALUES (value1, value2, )
RETURNING output_expression AS output_name;

PostgreSQL INSERT 语句示例

以下语句创建一个新表,名为links,用于演示:

DROP TABLE IF EXISTS links;

CREATE TABLE links (
	id SERIAL PRIMARY KEY,
	url VARCHAR(255) NOT NULL,
	name VARCHAR(255) NOT NULL,
	description VARCHAR (255),
    last_update DATE
);

请注意,您将在后续教程中学习如何创建新表。在本教程中,您只需执行它即可创建一个新表。

1) PostgreSQL INSERT – 将单行插入表中

以下语句将新行插入links表中:

INSERT INTO links (url, name)
VALUES('https://www.rockdata.net/tutorial/','PostgreSQL Tutorial');

该语句返回以下输出:

INSERT 0 1

要插入字符数据,请将其括在单引号 (’) 中,例如'PostgreSQL Tutorial'

如果在INSERT语句中省略必需的列,PostgreSQL 将发出错误。如果省略可选列,PostgreSQL 将使用列默认值进行插入。

在此示例中,description是可选列,因为它没有NOT NULL约束。因此,PostgreSQL 使用NULL插入到description列中。

PostgreSQL 自动为序列列生成序列号,因此您不必在INSERT语句中为序列列提供值。

下面的SELECT语句显示了links表的内容:

SELECT	* FROM links;

img

2) PostgreSQL INSERT – 插入包含单引号的字符串

如果要插入包含单引号 (') 的字符串,例如O'Reilly Media,则必须使用额外的单引号 (') 对其进行转义。例如:

INSERT INTO links (url, name)
VALUES('http://www.oreilly.com','O''Reilly Media');

输出:

INSERT 0 1

以下语句验证插入:

img

3) PostgreSQL INSERT – 插入日期值

要将日期值插入到类型为DATE的列中,请使用'YYYY-MM-DD'格式的日期。

以下语句将具有指定日期的新行插入到links表中:

INSERT INTO links (url, name, last_update)
VALUES('https://www.google.com','Google','2013-06-01');

输出:

INSERT 0 1

4) PostgreSQL INSERT – 获取最后一个插入 ID

要从插入的行中获取最后一个插入 ID,请使用INSERT语句的RETURNING子句。

例如,以下语句向links表中插入一个新行并返回最后一个插入 ID:

INSERT INTO links (url, name)
VALUES('http://www.postgresql.org','PostgreSQL') 
RETURNING id;

输出:

img

概括

  • 使用 PostgreSQL 的INSERT语句将数据插入表中。

  • 使用RETURNING子句获取插入的行。