Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

UPDATE

如果满足条件,则更新一个或多个表列中的值。

注意

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

语法

Copy
UPDATE table_name SET column = { expression | DEFAULT } [,...] [ FROM fromlist ] [ WHERE condition ]

参数

table_name

一个临时或永久表。只有表所有者或对表具有 UPDATE 权限的用户可以更新行。如果您使用 FROM 子句或从表达式或条件中的表进行选择,则必须对这些表具有 SELECT 权限。您不能在此处为表提供别名;不过可以在 FROM 子句中指定别名。

注意

Amazon Redshift Spectrum 外部表为只读。您无法对外部表进行 UPDATE。

SET column =

要修改的一个或多个列。未列出的列将保留其当前值。不要将表名包含在目标列的规范中。例如,UPDATE tab SET tab.col = 1 是无效的。

expression

一个定义指定列的新值的表达式。

DEFAULT

使用 CREATE TABLE 语句中分配给列的默认值更新列。

FROM tablelist

您可以通过引用其他表中的信息来更新表。在 FROM 子句中列出其他表,或者将子查询用作 WHERE 条件的一部分。FROM 子句中列出的表可以具有别名。如果您需要在列表中包含 UPDATE 语句的目标表,请使用别名。

WHERE condition

一个可选子句,用于限制对符合条件的行的更新。当条件返回 true 时,将更新指定的 SET 列。条件可以是列上的简单谓词,也可以是基于子查询的结果的条件。

可以在子查询中命名任何表,包括 UPDATE 的目标表。

使用说明

在更新表中的大量行后:

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

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

UPDATE 语句的 FROM 子句中不支持左、右和完整外部联接;它们将返回以下错误:

Copy
ERROR: Target table must be part of an equijoin predicate

如果需要指定外部联接,请在 UPDATE 语句的 WHERE 子句中使用子查询。

如果您的 UPDATE 语句需要自联接到目标表,您需要指定联接条件以及限定更新操作的行的 WHERE 子句条件。通常,在将目标表联接到自身或其他表时,最佳做法是使用可明确地将联接条件与限定要更新的行的条件分隔的子查询。

本页内容: