INSERT - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

INSERT

将新行插入到表中。您可以使用 VALUES 语法插入单行,使用 VALUES 语法插入多行,或者插入查询结果所定义的一行或多行 (INSERT INTO...SELECT)。

注意

我们强烈建议您使用 COPY 命令来加载大量数据。使用单个 INSERT 语句填充表可能过于缓慢。此外,如果您的数据在其他 Amazon Redshift 数据库表中已经存在,请使用 INSERT INTO SELECT 或 CREATE TABLE AS 来提高性能。有关使用 COPY 命令加载表的更多信息,请参阅加载数据

注意

单个 SQL 语句的最大大小为 16MB。

语法

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

参数

table_name

一个临时或永久表。只有表的所有者或对表具有 INSERT 权限的用户才能插入行。如果您使用 query 子句插入行,必须对查询中指定的表拥有 SELECT 权限。

注意

使用 INSERT(外部表)可将 SELECT 查询的结果插入到外部目录中的现有表中。有关更多信息,请参阅INSERT(外部表)

column

您可以将值插入到表的一个或多个列中。您可以按任意顺序列出目标列名。如果不指定列的列表,则要插入的值必须按照在 CREATE TABLE 语句中声明的顺序对应于表列。如果要插入的值数小于表中的列数,则将加载前 n 列。

对于在 INSERT 语句中未列出(隐式或显式)的任何列,声明的默认值或 null 值将被加载到这些列。

DEFAULT VALUES

如果在创建表时,已向表中的列分配默认值,则可使用这些关键字插入完全包含默认值的行。如果有任何列不具有默认值,则会向这些列插入 null。如果任何列被声明为 NOT NULL,则 INSERT 语句会返回错误。

VALUES

使用此关键字可插入一行或多行,每一行包括一个或多个值。每一行的 VALUES 列表必须与列的列表对应。要插入多个行,请在每个表达式列表之间使用逗号分隔符。不要重复使用 VALUES 关键字。多行 INSERT 语句的所有 VALUES 列表必须包含相同数量的值。

expression

单个值,或计算结果为单个值的表达式。每个值必须与该值所插入到的列的数据类型相兼容。对于其数据类型与列的已声明数据类型不匹配的值,会尽可能地自动转换为兼容的数据类型。例如:

  • 一个数字值 1.1 将以 1 值插入到 INT 列中。

  • 一个数字值 100.8976 将以 100.90 值插入到 DEC(5,2) 列中。

您可以通过在表达式中包含类型强制转换语法,显式地将值转换成某个兼容的数据类型。例如,表 T1 中的列 COL1 是 CHAR(3) 列:

insert into t1(col1) values('Incomplete'::char(3));

此语句将值 Inc 插入到列中。

对于单行 INSERT VALUES 语句,可以使用标量子查询作为表达式。子查询的结果将插入到适当的列中。

注意

对于多行 INSERT VALUES 语句,不支持将子查询用作表达式。

DEFAULT

使用此关键字可以按照在创建表时定义的方式,为列插入默认值。如果列不存在默认值,则插入 null 值。对于具有 NOT NULL 约束的列,如果没有在 CREATE TABLE 语句中明确为该列分配默认值,则不能将默认值插入到该列中。

query

通过定义任何查询,将一行或多行插入到表中。查询生成的所有行都将插入到表中。查询必须返回与表列相兼容的列的列表,不过列名称不一定要匹配。返回 TIMESTAMP

使用说明

注意

我们强烈建议您使用 COPY 命令来加载大量数据。使用单个 INSERT 语句填充表可能过于缓慢。此外,如果您的数据在其他 Amazon Redshift 数据库表中已经存在,请使用 INSERT INTO SELECT 或 CREATE TABLE AS 来提高性能。有关使用 COPY 命令加载表的更多信息,请参阅加载数据

所插入值的数据格式必须与 CREATE TABLE 定义指定的数据格式匹配。

在表中插入大量新行后:

  • 对表执行 Vacuum 操作,以回收存储空间并对行重新排序。

  • 分析表以更新查询计划程序的统计数据。

如果在将值插入到 DECIMAL 列时,这些值超过了指定的小数位数,则会根据需要对加载的值向上取整。例如,如果将值 20.259 插入到 DECIMAL(8,2) 列中,则存储的值是 20.26

您可以插入到 GENERATED BY DEFAULT AS IDENTITY 列。您可以使用您提供的值来更新定义为 GENERATED BY DEFAULT AS IDENTITY 的列。有关更多信息,请参阅GENERATED BY DEFAULT AS IDENTITY