UPDATE

The UPDATE statement is used to modify data in a specified table.

Synopsis

UpdateStmt

UPDATE - 图1

UpdateOption

UPDATE - 图2

TableRef

UPDATE - 图3

TableRefs

UPDATE - 图4

  1. UpdateStmt ::=
  2. "UPDATE" UpdateOption
  3. ( TableRef "SET" Assignment ("," Assignment)* WhereClause? OrderBy? Limit?
  4. | TableRefs "SET" Assignment ("," Assignment)* WhereClause?
  5. )
  6. UpdateOption ::=
  7. OptimizerHints? ("LOW_PRIORITY" | "HIGH_PRIORITY" | "DELAYED")? "IGNORE"?
  8. TableRef ::=
  9. ( TableFactor | JoinTable )
  10. TableRefs ::=
  11. EscapedTableRef ("," EscapedTableRef)*

Examples

  1. mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, c1 INT NOT NULL);
  2. Query OK, 0 rows affected (0.11 sec)
  3. mysql> INSERT INTO t1 (c1) VALUES (1), (2), (3);
  4. Query OK, 3 rows affected (0.02 sec)
  5. Records: 3 Duplicates: 0 Warnings: 0
  6. mysql> SELECT * FROM t1;
  7. +----+----+
  8. | id | c1 |
  9. +----+----+
  10. | 1 | 1 |
  11. | 2 | 2 |
  12. | 3 | 3 |
  13. +----+----+
  14. 3 rows in set (0.00 sec)
  15. mysql> UPDATE t1 SET c1=5 WHERE c1=3;
  16. Query OK, 1 row affected (0.01 sec)
  17. Rows matched: 1 Changed: 1 Warnings: 0
  18. mysql> SELECT * FROM t1;
  19. +----+----+
  20. | id | c1 |
  21. +----+----+
  22. | 1 | 1 |
  23. | 2 | 2 |
  24. | 3 | 5 |
  25. +----+----+
  26. 3 rows in set (0.00 sec)

MySQL compatibility

TiDB always uses the original value of a column when evaluating expressions. For example:

  1. CREATE TABLE t (a int, b int);
  2. INSERT INTO t VALUES (1,2);
  3. UPDATE t SET a = a+1,b=a;

In MySQL, the column b is updated to 2 because it is set to the value of a, and the value of a (which is 1) is updated to a+1 (which is 2) in the same statement.

TiDB follows the more standard SQL behavior, and updates b to 1.

See also