首批通过分布式安全可靠测评,为关键业务系统打造
关于 UPDATE 语句
更新时间:2026-06-17 09:15:07
UPDATE 语句用来更新表的行记录,本文介绍了相关语句的语法和示例。
UPDATE 语句
UPDATE 语句语法格式如下:
UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];
| 参数 | 是否必填 | 描述 | 示例 |
|---|---|---|---|
| table_name | 是 | 指定需要更新数据的表 | table1 |
| column_name = value [, column_name = value] | 是 | 指定需要更新的列,等号(=)后面的 value 是更新的目标值 | name='US' |
| [ WHERE condition ] | 否 | 条件子句指定要更新的行记录必须满足的条件。如果不填表示更新表对应列的所有记录。 | where id=3 |
示例
更新所有记录
以下示例表示更新 t_insert 表中 value 列的所有值 +1。
obclient> UPDATE t_insert SET value=value+1 ;
Query OK, 4 rows affected
Rows matched: 4 Changed: 4 Warnings: 0
obclient> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10002 | 01-JEN-70 |
| 2 | US | 10003 | 01-JEN-70 |
| 3 | EN | 10004 | 01-JEN-70 |
+----+------+-------+------------+
4 rows in set
执行 UPDATE 语句时要注意控制事务不要太大,可以通过 limit 控制数量或者通过 where 来控制范围。不带条件更新的时候,如果记录数达到几十万或者几百万,会有大事务产生,可能会导致执行失败。
事务过大导致的具体报错如下:
obclient> UPDATE analog SET ach=ach+1; ERROR 4012 (HY000): Timeout通过 limit 控制单次事务更新的行数,如下示例,在 analog 表中更新前 100000 行数据的 ach 值为 ach+1。
UPDATE analog SET ach=ach+1 LIMIT 100000;通过 where 筛选分批更新:
UPDATE analog SET ach=ach+1 where ach=64;
更新部分记录,违反约束报错
当表上有唯一性约束的时候,更新相同的记录,数据库会报错。
obclient> CREATE UNIQUE INDEX uk_name ON t_insert(name);
Query OK, 0 rows affected
obclient> UPDATE t_insert SET name='US' WHERE id=3;
ORA-00001: unique constraint 'US' for key 'UK_NAME' violated