本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
UPDATE
在條件滿足時,更新一個或多個資料表資料欄中的值。
注意
單一 SQL 陳述式的大小上限為 16 MB。
語法
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...] [ FROM fromlist ] [ WHERE condition ]
參數
- WITH 子句
指定一個或多個 common-table-expressions 的選用子句。請參閱 WITH 子句。
- table_name
-
暫時性或持久性資料表。只有資料表的擁有者,或具有資料表 UPDATE 權限的使用者可以更新資料列。如果您在表達式或條件中使用 FROM 子句或從資料表選取,則必須具有這些資料表的 SELECT 權限。您無法在這裡為資料表提供別名;不過,您可以在 FROM 子句中指定別名。
注意
Amazon Redshift Spectrum 外部資料表處於唯讀狀態。您無法 UPDATE 外部資料表。
- 別名
-
目標資料表的暫時替代名稱。別名是選擇性項目。AS 關鍵字一律為選用。
- SET column =
-
您要修改的一個或多個資料欄。未列出的資料欄會保留其目前值。不要在目標資料欄的規格中包含資料表名稱。例如,
UPDATE tab SET tab.col = 1
無效。 - 運算式
-
此表達式會為所指定資料欄定義新值。
- DEFAULT
-
使用在 CREATE TABLE 陳述式中為資料欄指派的預設值更新資料欄。
- FROM tablelist
-
您可以透過參考其他資料表中的資訊更新資料表。請在 FROM 子句中列出這些其他資料表,或在 WHERE 條件中使用子查詢。FROM 子句中列出的資料表可以有別名。如果您需要在清單中包含 UPDATE 陳述式的目標資料表,請使用別名。
- WHERE condition
-
此選用子句會限制僅更新符合條件的資料列。當條件傳回
true
時,指定的 SET 欄就會更新。條件可以是資料欄上簡單的述詞,或是根據子查詢結果的條件。您可以在子查詢中為任何資料表命名,包括 UPDATE 的目標資料表在內。
使用須知
在更新資料表中的大量資料列之後:
-
清空資料表以回收儲存空間和重新排序資料列。
-
分析資料表以更新查詢規劃器的統計資訊。
UPDATE 陳述式的 FROM 子句中不支援左、右和完整外部聯結;它們會傳回下列錯誤:
ERROR: Target table must be part of an equijoin predicate
若您需要指定外部聯結,可在 UPDATE 陳述式的 WHERE 子句中使用子查詢。
若您的 UPDATE 陳述式需要自我聯結至目標資料表,則您需要指定聯結條件以及 WHERE 子句條件來限定更新操作的資料列。大致而言,當目標資料表與其本身或其他資料表聯結時,最佳實務會是使用子查詢清楚區分聯結條件和限定更新資料列的條件。
當組態參數 error_on_nondeterministic_update
設定為 true 時,每列具有多個相符項目的 UPDATE 查詢會擲回錯誤。如需詳細資訊,請參閱error_on_nondeterministic_update。
您可以更新 GENERATED BY DEFAULT AS IDENTITY 資料欄。定義為 GENERATED BY DEFAULT AS IDENTITY 的資料欄可以利用您提供的值進行更新。如需詳細資訊,請參閱GENERATED BY DEFAULT AS IDENTITY。