| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 6. 數據操作 | Fast Forward | Next |
修改已經存儲在數據庫中的數據的行為叫做更新。你可以更新 獨立的行,也可以更新表中所有的行,還可以更新其中的一部分行。 我們可以獨立地更新每個字段,而其他的字段則不受影響。
要執行一次更新,你需要三種信息:
表的名字和要更新的字段名,
字段的新數值,
要更新的是哪行。
我們在 Chapter 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 子句中的等號 是比較,不過這樣並不會導致任何歧義。當然條件不一定非得等于測試。 許多其他操作符也都可以使用(參閱 Chapter 9)。 但是表達式必須得出一個布爾結果。
你還可以在一個 UPDATE 命令中更新更多的字段, 方法是在 SET 子句中列出更多賦值。比如:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;