REPLACE

The REPLACE statement is semantically a combined DELETE+INSERT statement. It can be used to simplify application code.

Synopsis

ReplaceIntoStmt

REPLACE - 图1

PriorityOpt

REPLACE - 图2

IntoOpt

REPLACE - 图3

TableName

REPLACE - 图4

PartitionNameListOpt

REPLACE - 图5

InsertValues

REPLACE - 图6

  1. ReplaceIntoStmt ::=
  2. 'REPLACE' PriorityOpt IntoOpt TableName PartitionNameListOpt InsertValues
  3. PriorityOpt ::=
  4. ( 'LOW_PRIORITY' | 'HIGH_PRIORITY' | 'DELAYED' )?
  5. IntoOpt ::= 'INTO'?
  6. TableName ::=
  7. Identifier ( '.' Identifier )?
  8. PartitionNameListOpt ::=
  9. ( 'PARTITION' '(' Identifier ( ',' Identifier )* ')' )?
  10. InsertValues ::=
  11. '(' ( ColumnNameListOpt ')' ( ValueSym ValuesList | SelectStmt | '(' SelectStmt ')' | UnionStmt ) | SelectStmt ')' )
  12. | ValueSym ValuesList
  13. | SelectStmt
  14. | UnionStmt
  15. | 'SET' ColumnSetValue? ( ',' ColumnSetValue )*

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.12 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> REPLACE INTO t1 (id, c1) VALUES(3, 99);
  16. Query OK, 2 rows affected (0.01 sec)
  17. mysql> SELECT * FROM t1;
  18. +----+----+
  19. | id | c1 |
  20. +----+----+
  21. | 1 | 1 |
  22. | 2 | 2 |
  23. | 3 | 99 |
  24. +----+----+
  25. 3 rows in set (0.00 sec)

MySQL compatibility

The REPLACE statement in TiDB is fully compatible with MySQL. If you find any compatibility differences, report a bug.

See also