本文介紹了更新數據的相關內容。
簡介
修改已經存儲在數據庫中的數據的行為叫做更新。你可以更新單個行,也可以更新表中所有的行,還可以更新其中的一部分行。 我們可以獨立地更新每個列,而其他的列則不受影響。
要更新現有的行,使用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;