暂无图片
MySQL replace into
最近更新:2023-03-20 10:16:40

概念描述

REPLACE的工作原理与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。 image.png 下面分几种场景对replace into 进行测试验证。

测试验证

当表中存在主键但是不存在唯一建的时候
  • 创建表yy,主键id
root@localhost:test 03:30:44 >CREATE TABLE `yy` (
    ->   `id` bigint(20) NOT NULL,
    ->   `name` varchar(20) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)
  • 向表yy中新增一条数据
root@localhost:test 03:31:36 >insert into yy values(1,'abc');
Query OK, 1 row affected (0.00 sec)

root@localhost:test 03:32:03 >select * from yy;
+----+------+
| id | name |
+----+------+
|  1 | abc  |
+----+------+
1 row in set (0.00 sec)
  • 利用replace into 新增第二条数据(与第一条数据无关联)
root@localhost:test 03:32:09 >replace into yy values(2,'bbb');
Query OK, 1 row affected (0.00 sec)

root@localhost:test 03:32:31 >select * from yy;
+----+------+
| id | name |
+----+------+
|  1 | abc  |
|  2 | bbb  |
+----+------+
2 rows in set (0.00 sec)
  • 使用replace into新增id=1但name为'ccc'的数据(主键冲突)
root@localhost:test 03:32:33 >replace into yy values(1,'ccc');
Query OK, 2 rows affected (0.01 sec)

root@localhost:test 03:32:48 >select * from yy;
+----+------+
| id | name |
+----+------+
|  1 | ccc  |
......