UPDATE
UPDATE — 更新表中的行
大纲
UPDATE [ ONLY ]tableSETcol=expression[, ...] [ FROMfromlist] [ WHEREcondition]
输入
table一个现有表的名称(可带模式限定)。如果指定了
ONLY,只更新该表。如果未指定ONLY,则更新该表及其所有后代表(如果有)。可以在表名后追加*来表示要扫描后代表,但在当前版本中这是默认行为。(在 7.1 之前的版本中,ONLY是默认行为。)默认行为可以通过修改SQL_INHERITANCE配置选项来改变。columntable中一个列的名称。expression赋给列的一个有效表达式或值。
fromlist一个 PostgreSQL 非标准扩展,允许来自其他表的列出现在 WHERE 条件中。
conditionWHERE 子句的进一步描述请参阅 SELECT 语句。
输出
UPDATE#成功时返回的消息。
#表示被更新的行数。如果#为 0,则没有行被更新。
描述
UPDATE 更改所有满足条件的行中指定列的值。只有要修改的列才需要作为列出现在语句中。
数组引用使用与SELECT中相同的语法。也就是说,可以用单次查询替换单个数组元素、数组元素的一个范围或整个数组。
要修改表,你必须拥有对它的写权限,以及对 WHERE 条件中提到其值的任何表的读权限。
默认情况下,UPDATE 将更新指定的表及其所有子表中的元组。如果只想更新提到的这个特定表,应当使用 ONLY 子句。
用法
把列 kind 上的单词 Drama 改为 Dramatic:
UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama'; SELECT * FROM films WHERE kind = 'Dramatic' OR kind = 'Drama'; code | title | did | date_prod | kind | len -------+---------------+-----+------------+----------+------- BL101 | The Third Man | 101 | 1949-12-23 | Dramatic | 01:44 P_302 | Becket | 103 | 1964-02-03 | Dramatic | 02:28 M_401 | War and Peace | 104 | 1967-02-12 | Dramatic | 05:57 T_601 | Yojimbo | 106 | 1961-06-16 | Dramatic | 01:50 DA101 | Das Boot | 110 | 1981-11-11 | Dramatic | 02:29
兼容性
SQL92
SQL92 为定位式 UPDATE 语句定义了一种不同的语法:
UPDATEtableSETcolumn=expression[, ...] WHERE CURRENT OFcursor
其中 cursor
标识一个打开的游标。