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