?
本文檔使用
php中文網手冊 發(fā)布
修改已經存儲在數據庫中的數據的行為叫做更新。你可以更新單獨的一行,也可以更新表中所有的行, 還可以更新其中的一部分行。我們可以獨立地更新每個字段,而其它的字段則不受影響。
更新現(xiàn)有行,使用命令UPDATE,這需要三種信息:
表的名字和要更新的字段名
字段的新值
要更新哪些行
我們在Chapter 5里說過,SQL通常并不為數據行提供唯一標識。因此我們無法直接聲明需要更新哪一行。 但是,我們可以通過聲明一個被更新的行必須滿足的條件。只有在表里存在主鍵的時候 (不管你叫它什么), 我們才能通過選取主鍵可靠地指定一個獨立的行。圖形化的數據庫訪問工具依賴這個東西來讓我們可以獨立地更新某些行。
比如,這條命令將所有價格為5的產品重定價為10:
UPDATE products SET price = 10 WHERE price = 5;
這樣做可能導致零行、一行或多行數據被更新。如果我們試圖執(zhí)行一個不匹配任何行的更新,那也不算錯。
讓我們仔細看看這個命令。首先是關鍵字UPDATE跟著表名字。和平常一樣,表名字也可以是用模式修飾的,否則就會從模式路徑中把它找出來。 然后是關鍵字SET跟著字段名與一個等號以及新的字段值。新的字段值可以是任意標量表達式,而不僅僅是常量。比如,如果你想把所有產品的價格提高10%,可以用:
UPDATE products SET price = price * 1.10;
如你所見,新值的表達式也可以引用行中現(xiàn)有的數值。我們還忽略了WHERE子句。 如果我們忽略了這個子句,那么表中所有的行都要被更新。如果出現(xiàn)了WHERE子句,那么只有匹配其條件的行才會被更新。 請注意在SET子句中的等號是一個賦值,而在WHERE子句中的等號是比較,不過這樣并不會導致任何歧義。 當然WHERE條件不一定非得是相等測試。許多其它操作符也都可以使用(參閱Chapter 9)。但是表達式必須得出一個布爾結果。
你還可以在一個UPDATE命令中更新更多的字段,方法是在SET子句中列出更多賦值。比如:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;