2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

6.2. 更新資料 #

資料庫中已存在的資料的修改稱為更新。您可以更新單個行、表中的所有行或所有行的一個子集。每一列都可以單獨更新;其他列不受影響。

要更新現有行,請使用 UPDATE 命令。這需要三個資訊

  1. 要更新的表名和列名

  2. 列的新值

  3. 要更新的行(s)

回想一下 第 5 章,SQL 通常不提供行的唯一識別符號。因此,並非總是能直接指定要更新的行。相反,您需要指定一個行必須滿足的條件才能被更新。只有當表中存在主鍵時(無論您是否已宣告它),您才能透過選擇匹配主鍵的條件來可靠地定址單個行。圖形化資料庫訪問工具依賴於此功能,允許您單獨更新行。

例如,此命令將價格為 5 的所有產品更新為價格為 10

UPDATE products SET price = 10 WHERE price = 5;

這可能會導致零行、一行或多行被更新。嘗試不匹配任何行的更新不是錯誤。

讓我們仔細看看這個命令。首先是關鍵字 UPDATE,後跟表名。與往常一樣,表名可以帶模式限定,否則將在路徑中查詢。接下來是關鍵字 SET,後跟列名、等號和新列值。新列值可以是任何標量表達式,而不僅僅是常量。例如,如果您想將所有產品的價格提高 10%,可以使用

UPDATE products SET price = price * 1.10;

如您所見,新值表示式可以引用行中的現有值。我們還省略了 WHERE 子句。如果省略,則表示更新表中的所有行。如果存在,則僅更新匹配 WHERE 條件的行。請注意,SET 子句中的等號是賦值,而 WHERE 子句中的等號是比較,但這不會造成任何歧義。當然,WHERE 條件不必是等號測試。還有許多其他運算子可用(請參閱 第 9 章)。但表示式需要求值為布林結果。

您可以透過在 SET 子句中列出多個賦值來在 UPDATE 命令中更新多個列。例如

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

提交更正

如果您在文件中看到任何不正確的內容、與您在該功能上的實際經驗不符的內容或需要進一步澄清的內容,請使用 此表單 報告文件問題。