標籤:
修改已經儲存在資料庫中的資料的行為叫做更新。你可以更新單獨的一行,也可以更新表中所有的行,還可以更新其中的一部分行。我們可以獨立地更新每個欄位,而其它的欄位則不受影響。
要更新現有的行,使用UPDATE命令。這需要三種資訊:
表的名字和要更新的欄位名
欄位的新值
要更新哪些行
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 條件不一定非得是等式判斷。也可以使用很多其他的操作符。但是運算式必須得出一個布爾結果。
你還可以在一個UPDATE命令中更新更多的欄位,方法是在SET子句中列出更多指派陳述式。比如:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
更新PostgreSQL資料