UPDATE¶
使用新值更新目标表中的指定行。
语法¶
必填参数¶
target_table指定要更新的表。
col_name指定
target_table中的列的名称。请勿包含表名称。例如,UPDATE t1 SET t1.col = 1无效。value指定要在
col_name中设置的新值。
可选参数¶
FROM additional_tables指定用于选择要更新的行或设置新值的一个或多个表。请注意,重复目标表会导致自联接。
WHERE condition表达式,指定目标表中要更新的行。
默认:无值(目标表的所有行都已更新)
使用说明¶
当 FROM 子句包含表之间(例如
t1和t2)的 JOIN 时,t1中的目标行可以联接(即匹配)表t2中的多行。发生这种情况时,目标行称为 多联接行。更新多联接行时,ERROR_ON_NONDETERMINISTIC_UPDATE 会话参数控制更新的结果:如果为
FALSE(默认值),则不返回任何错误,并且使用其中一个联接行来更新目标行;但是,选定的联接行是不确定的。IF
TRUE,则返回错误,包括联接多行的目标行的值示例。
要设置参数,请执行以下操作:
示例¶
使用两个表执行标准更新:
使用产生不确定结果的联接进行更新:
ERROR_ON_NONDETERMINISTIC_UPDATE = FALSE 时,该语句使用
src中下列行之一的值随机更新target中的单行:
(0, 11)、(0, 12)、(0,13)ERROR_ON_NONDETERMINISTIC_UPDATE = TRUE 时,返回一个错误,报告重复的 DML 行
[0, 10]。
要避免这种不确定行为和错误,请使用 1 对 1 联接:
该语句导致
target中的单行更新为(0, 11)`(来自 :code:`src中v的最小值所在行的值),并且永远不会导致错误。