跳到主要内容

REPLACE

描述

该语句用于替换表中的一个或多个记录。如果没有主键或唯一键冲突则插入记录,如果存在冲突则先删除冲突记录再插入新的记录。

格式

replace_stmt:
REPLACE [INTO] table_factor [PARTITION (partition_name_list)] [(column_name_list)]
{VALUES | VALUE} column_value_lists;

partition_name_list:
partition_name [, partition_name ...]

column_name_list:
column_name [, column_name ...]

column_value_lists:
(column_value_list) [, (column_value_list) ...]

column_value_list:
column_value [, column_value ...]

column_value:
{expression | DEFAULT}

参数解释

参数描述
table_factor替换的表名。
column_name_list指定替换数据的列。
partition_name_list替换表指定的分区名。

示例

本示例基于如下表定义。

CREATE TABLE test (c1 INT PRIMARY KEY, c2 VARCHAR(40));
Query OK, 0 rows affected (0.547 sec)
  1. 替换 test 表中的行一和行二的值分别为 'hello alibaba''hello ob'

    REPLACE INTO test VALUES (1, 'hello alibaba'),(2, 'hello ob');
    Query OK, 2 rows affected (0.689 sec)
    Records: 2 Duplicates: 0 Warnings: 0
  2. 查看 test 表中的行一和行二内容。

    SELECT * FROM test;
    +----+---------------+
    | c1 | c2 |
    +----+---------------+
    | 1 | hello alibaba |
    | 2 | hello ob |
    +----+---------------+
    2 rows in set (0.001 sec)
  3. 替换表 test 中的行三和行二的内容分别为 'hello alibaba''hello oceanbase'

    REPLACE INTO test VALUES (3, 'hello alibaba'),(2, 'hello oceanbase');
    Query OK, 3 rows affected (0.767 sec)
    Records: 2 Duplicates: 1 Warnings: 0
  4. 查看 test 表中的行一、行二和行三的内容。

    SELECT * FROM test;
    +----+-----------------+
    | c1 | c2 |
    +----+-----------------+
    | 1 | hello alibaba |
    | 2 | hello oceanbase |
    | 3 | hello alibaba |
    +----+-----------------+
    3 rows in set (0.019 sec)