UPDATESQL语句详细⽤法
UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...]
[ FROM fromlist ]
[ WHERE condition ]
描述sql中update什么意思
UPDATE 改变满⾜条件的所有⾏的声明了的列/字段的值。 只有要更改的列/字段需要在 SET ⼦句中出现,没有明确修改的字段保持它们原来的数值。
缺省时,UPDATE 将更新所声明的表和所有⼦表的记录。 如果你希望只更新所声明的表,你应该使⽤ ONLY ⼦句。
使⽤存在于同个数据库⾥其它表的信息来更新⼀个表,有两种⽅法可以⽤: 使⽤⼦查询,或者在 FROM ⼦句⾥声明另外⼀个表。 哪个⽅法更好取决于具体的环境。
要更改表,你必须对它有UPDATE 权限, 同样对 expression 或者 condition 条件⾥提到的任何表也要有SELECT权限。
参数
table
现存表的名称(可以有模式修饰)。
column
表 table 中字段名。 必要时,字段名可以⽤⼦域名或者数组下标修饰。
expression
赋予列/字段的⼀个有效的值或表达式。表达式可以使⽤表中这个或其它字段的旧数值。
DEFAULT
把字段设置为它的缺省值(如果没有缺省表达式赋予它,那么就是 NULL)。
fromlist
⼀个表表达式的列表,允许来⾃其它表中的字段出现在 WHERE 条件⾥。 这个类似于可以在⼀个 SE
LECT 语句的 FROM ⼦句 ⾥声明表列表。请注意⽬标表绝对不能出现在 fromlist ⾥, 除⾮你是在使⽤⼀个⾃连接(这个时候,它必须以 fromlist 的⼀个别名的形式出现)。
condition
⼀个表达式,返回 boolean 类型。只有这个表达式返回 true 的⾏被更新。
输出
成功完成后,UPDATE 命令返回形如
UPDATE count
的命令标签。count 是更新的⾏数。 如果 count 是 0, 那么没有符合 condition 的⾏(这个不认为是错误)。
注意
在出现 FROM ⼦句的时候,实际上发⽣的事情是⽬标表和 fromlist ⾥提到的表连接在⼀起,并且每个连接输出⾏都代表⼀个⽬标表的更新操作。 再使⽤ FROM 的时候,你应该保证连接为每个需要修改
的⾏最多⽣成⼀个输出⾏。 换句话说,⼀个⽬标⾏不应该和超过⼀⾏来⾃其它表的数据⾏连接。 如果它连接了多于⼀个⾏,那么连接⾏⾥⾯将会只有⼀⾏⽤于更新⽬标⾏, 但是使⽤哪⾏是⼀个很难预期的事情。
因为这个不确定性,只再⼦查询⾥⾯引⽤其它表是安全的, 尽管通常更难读并且⽐使⽤连接也更慢些。
例⼦
把表 films ⾥的字段 kind ⾥的词 Drama ⽤Dramatic 代替:
UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';
调整表 weather 中的⼀⾏的温度记录并且把降⽔设置为缺省值:
UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
WHERE city = 'San Francisco' AND date = '2003-07-03';
增加负责 Acme 公司客户的销售的销售计数,使⽤ FROM ⼦句语法:
UPDATE employees SET sales_count = sales_count + 1 FROM accounts
WHERE accounts.name = 'Acme Corporation'
AND employees.id = accounts.sales_person;
执⾏同样的操作,使⽤ WHERE ⼦句⾥的⼦查询:
UPDATE employees SET sales_count = sales_count + 1 WHERE id =
(SELECT sales_person FROM accounts WHERE name = 'Acme Corporation');
试图带着库存量插⼊⼀个新的库存项。如果该项存在,则更新现有项的库存数。 要做这件事情⽽⼜不使整个事务失效,使⽤保留点(savepoints)。
BEGIN;
-- 其它操作
SAVEPOINT sp1;
INSERT INTO wines VALUES('Chateau Lafite 2003', '24');
-- 假设上⾯的因为⼀个唯⼀键字违反⽽失效,
-- 因此现在我们发出这些命令:
ROLLBACK TO sp1;
UPDATE wines SET stock = stock + 24 WHERE winename = 'Chateau Lafite 2003';
-- 继续其它操作,最后
COMMIT;
兼容性
这条命令遵循 SQL 标准。 只是 FROM ⼦句是 PostgreSQL 扩展。
有些其它数据库系统提供⼀个 FROM 选项, 在这个选项下,认为⽬标表会再次在 FROM ⾥列出。 这不是 PostgreSQL 解析 FROM 的⽅式。 移植使⽤这类扩展的应⽤的时候要注意。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论