Purpose
You can use this statement to modify the field values in a table.
Syntax
UPDATE [IGNORE] table_references
SET update_asgn_list
[WHERE where_condition]
[ORDER BY order_list]
[LIMIT row_count];
table_references:
table_name [PARTITION (partition_name,...)] [, ...]
update_asgn_list:
column_name = expr [, ...]
order_list:
column_name [ASC|DESC] [, column_name [ASC|DESC]...]
Parameters
| Parameter | Description |
|---|---|
| IGNORE | Ignores errors that occur during the execution of an INSERT statement. |
| table_references | The name of the table to be modified. Multiple table names must be separated with commas (,). |
| where_condition | The filter condition. |
| row_count | The maximum number of rows. |
| table_name | The name of the table into which data is to be inserted. |
| partition_name | The name of the partition into which data is to be inserted. |
| column_name | The name of the column. |
| ASC | Sorts column names in ascending order. |
| DESC | Sorts column names in descending order. |
Considerations
Direct UPDATE operations on subqueries are not supported for either a single table or multiple tables. Otherwise, an error occurs. Here is an example:
obclient> UPDATE (SELECT * FROM T1) SET C1 = 100;
ERROR 1288 (HY000): The target table of the UPDATE is not updatable
Examples
Create tables
t1andt2.obclient> CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT); Query OK, 0 rows affected obclient> SELECT * FROM t1; +----+------+ | c1 | c2 | +----+------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | +----+------+ 4 rows in set obclient> CREATE TABLE t2(c1 INT PRIMARY KEY, c2 INT) PARTITION BY KEY(c1) PARTITIONS 4; Query OK, 0 rows affected obclient> SELECT * FROM t2; +----+------+ | c1 | c2 | +----+------+ | 5 | 5 | | 1 | 1 | | 2 | 2 | | 3 | 3 | +----+------+ 4 rows in setFor the row where
t1.c1 = 1in thet1table, set its value in thec2column to100.obclient> UPDATE t1 SET t1.c2 = 100 WHERE t1.c1 = 1; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM t1; +----+------+ | c1 | c2 | +----+------+ | 1 | 100 | | 2 | 2 | | 3 | 3 | | 4 | 4 | +----+------+ 4 rows in setFor the first two rows sorted by column
c2in tablet1, set their values in columnc2to100.obclient> UPDATE t1 SET t1.c2 = 100 ORDER BY c2 LIMIT 2; Query OK, 2 rows affected Rows matched: 2 Changed: 2 Warnings: 0 obclient> SELECT * FROM t1; +----+------+ | c1 | c2 | +----+------+ | 1 | 100 | | 2 | 100 | | 3 | 3 | | 4 | 4 | +----+------+ 4 rows in setIn partition
p2of tablet2, for rows wheret2.c1 > 2, set their values in columnc2to100.obclient> UPDATE t2 PARTITION(p2) SET t2.c2 = 100 WHERE t2.c1 > 2; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM t2; +----+------+ | c1 | c2 | +----+------+ | 5 | 5 | | 1 | 1 | | 2 | 2 | | 3 | 100 | +----+------+ 4 rows in setUpdate multiple tables. For rows where
t1.c1 = t2.c1, set their values in columnc2of tablet1to100and set their values in columnc2of tablet2to200.obclient> UPDATE t1,t2 SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2; Query OK, 6 rows affected Rows matched: 6 Changed: 6 Warnings: 0 obclient> SELECT * FROM t1; +----+------+ | c1 | c2 | +----+------+ | 1 | 100 | | 2 | 100 | | 3 | 100 | | 4 | 4 | +----+------+ 4 rows in set obclient> SELECT * FROM t2; +----+------+ | c1 | c2 | +----+------+ | 5 | 5 | | 1 | 200 | | 2 | 200 | | 3 | 200 | +----+------+ 4 rows in setUpdate multiple tables. For rows where
t1.c1 = t2.c1, set their values in columnc2in partitionp2of tablet1to100and set their values in columnc2in partitionp2of tablet2to200.obclient> UPDATE t1,t2 PARTITION(p2) SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2; Query OK, 6 rows affected Rows matched: 6 Changed: 6 Warnings: 0 obclient> SELECT * FROM t1; +----+------+ | c1 | c2 | +----+------+ | 1 | 100 | | 2 | 100 | | 3 | 100 | | 4 | 4 | +----+------+ 4 rows in set obclient> SELECT * FROM t2; +----+------+ | c1 | c2 | +----+------+ | 5 | 5 | | 1 | 200 | | 2 | 200 | | 3 | 200 | +----+------+ 4 rows in setUpdate an updatable view
v.obclient> CREATE VIEW v AS SELECT * FROM t1; Query OK, 0 rows affected obclient> UPDATE v SET v.c2 = 100 WHERE v.c1 = 1; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM v; +----+------+ | c1 | c2 | +----+------+ | 1 | 100 | | 2 | 2 | | 3 | 3 | | 4 | 4 | +----+------+ 4 rows in set