PostgreSQL 更新數(shù)據(jù)

2021-08-26 11:12 更新

修改已經(jīng)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的行為叫做更新。你可以更新單個(gè)行,也可以更新表中所有的行,還可以更新其中的一部分行。 我們可以獨(dú)立地更新每個(gè)列,而其他的列則不受影響。

要更新現(xiàn)有的行,使用UPDATE命令。這需要提供三部分信息:

  1. 表的名字和要更新的列名

  2. 列的新值

  3. 要更新的是哪(些)行

我們在第 5 章里說過,SQL 通常并不為行提供唯一標(biāo)識(shí)符。因此我們無法總是直接指定需要更新哪一行。但是,我們可以通過指定一個(gè)被更新的行必須滿足的條件。只有在表里面存在主鍵的時(shí)候(不管你聲明它還是不聲明它),我們才能可靠地通過選擇一個(gè)匹配主鍵的條件來指定一個(gè)獨(dú)立的行。圖形化的數(shù)據(jù)庫訪問工具就靠這允許我們獨(dú)立地更新某些行。

例如,這條命令把所有價(jià)格為5的產(chǎn)品的價(jià)格更新為10:

UPDATE products SET price = 10 WHERE price = 5;

這樣做可能導(dǎo)致零行、一行或者更多行被更新。如果我們試圖做一個(gè)不匹配任何行的更新,那也不算錯(cuò)誤。

讓我們仔細(xì)看看這個(gè)命令。首先是關(guān)鍵字UPDATE, 然后跟著表名字。和平常一樣,表名字也可以是用模式限定的, 否則會(huì)從路徑中查找它。然后是關(guān)鍵字SET, 后面跟著列名、一個(gè)等號(hào)以及新的列值。新的列值可以是任意標(biāo)量表達(dá)式, 而不僅僅是常量。例如,如果你想把所有產(chǎn)品的價(jià)格提高 10%,你可以用:

UPDATE products SET price = price * 1.10;

如你所見,用于新值的表達(dá)式也可以引用行中現(xiàn)有的值。我們還忽略了WHERE子句。如果我們忽略了這個(gè)子句, 那么就意味著表中的所有行都要被更新。如果出現(xiàn)了WHERE子句, 那么只有匹配它后面的條件的行被更新。請注意在SET子句中的等號(hào)是一個(gè)賦值, 而在WHERE子句中的等號(hào)是比較,不過這樣并不會(huì)導(dǎo)致任何歧義。當(dāng)然WHERE條件不一定非得是等值測試。許多其他操作符也都可以使用(參閱第 9 章)。但是表達(dá)式必須得出一個(gè)布爾結(jié)果。

你還可以在一個(gè)UPDATE命令中更新更多的列, 方法是在SET子句中列出更多賦值。例如:

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)