?
This document uses PHP Chinese website manual Release
修改已經(jīng)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的行為叫做更新。你可以更新單獨(dú)的一行,也可以更新表中所有的行, 還可以更新其中的一部分行。我們可以獨(dú)立地更新每個(gè)字段,而其它的字段則不受影響。
更新現(xiàn)有行,使用命令UPDATE,這需要三種信息:
表的名字和要更新的字段名
字段的新值
要更新哪些行
我們在Chapter 5里說過,SQL通常并不為數(shù)據(jù)行提供唯一標(biāo)識(shí)。因此我們無法直接聲明需要更新哪一行。 但是,我們可以通過聲明一個(gè)被更新的行必須滿足的條件。只有在表里存在主鍵的時(shí)候 (不管你叫它什么), 我們才能通過選取主鍵可靠地指定一個(gè)獨(dú)立的行。圖形化的數(shù)據(jù)庫訪問工具依賴這個(gè)東西來讓我們可以獨(dú)立地更新某些行。
比如,這條命令將所有價(jià)格為5的產(chǎn)品重定價(jià)為10:
UPDATE products SET price = 10 WHERE price = 5;
這樣做可能導(dǎo)致零行、一行或多行數(shù)據(jù)被更新。如果我們試圖執(zhí)行一個(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)有的數(shù)值。我們還忽略了WHERE子句。 如果我們忽略了這個(gè)子句,那么表中所有的行都要被更新。如果出現(xiàn)了WHERE子句,那么只有匹配其條件的行才會(huì)被更新。 請(qǐng)注意在SET子句中的等號(hào)是一個(gè)賦值,而在WHERE子句中的等號(hào)是比較,不過這樣并不會(huì)導(dǎo)致任何歧義。 當(dāng)然WHERE條件不一定非得是相等測試。許多其它操作符也都可以使用(參閱Chapter 9)。但是表達(dá)式必須得出一個(gè)布爾結(jié)果。
你還可以在一個(gè)UPDATE命令中更新更多的字段,方法是在SET子句中列出更多賦值。比如:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;