sql使用replace into时,数据同时涉及主键和唯一键效果

在代码中发现xml的insert标签下使用到了replace into语句,这里简单测试一下


前言

replace into语句会根据唯一键/主键删除原有的一条记录, 并且插入一条新的记录来替换原记录。如果没有表不存在唯一键/主键 或者 插入的数据唯一键/主键没有重复的,那么会新增一条记录。

如果一张表仅仅有主键,那么上面这段话就比较容易理解。但如果一张表中同时出现了主键和唯一键时,效果会怎么样呢?当replace into 的数据同时涉及到主键和唯一键时,情况有是如何?这是这次的主要测试内容。


一、简单创建一个表

新建一个test表,三个字段,uid,name,mobile, uid是自增的主键,mobile是唯一索引;

create table test(
	uid int(11) NOT NULL AUTO_INCREMENT,
    name varchar(50),
    mobile varchar(11) unique,
    PRIMARY KEY (uid)
);
#插入两条数据进行演示
insert into  test VALUES (1,'张三','135');
insert into  test VALUES (2,'李四','137');

此时表中数据如下:
在这里插入图片描述

二、测试(每次测试均在上次测试的结果上进行)

1.主键不同,唯一键相同

执行下方sql:

REPLACE into test VALUES (3,'李四','137');

navicat提示:

REPLACE into test VALUES (3,'李四','137')
> Affected rows: 2
> 时间: 0.039s

效果如下:
在这里插入图片描述
结论:

主键不同,唯一键相同,替换。

2.主键相同,唯一键不同

执行下方sql:

REPLACE into test VALUES (3,'李四','140');

navicat提示:

REPLACE into test VALUES (3,'李四','140')
> Affected rows: 2
> 时间: 0.046s

效果如下:
在这里插入图片描述
结论:

主键相同,唯一键不同,替换。

3.主键和唯一键均相同

执行下方sql:

REPLACE into test VALUES (3,'test','140');

navicat提示:

REPLACE into test VALUES (3,'test','140')
> Affected rows: 2
> 时间: 0.014s

效果如下:
在这里插入图片描述

结论:

主键和唯一键均相同,替换。

4.主键和唯一键均不同

执行下方sql:

REPLACE into test VALUES (4,'aaa','150');

navicat提示:

REPLACE into test VALUES (4,'aaa','150')
> Affected rows: 1
> 时间: 0.023s

效果如下:
在这里插入图片描述

结论:

主键和唯一键均不同,新增。


总结

使用replace into时,若数据同时涉及主键和唯一键:

  1. 主键不同,唯一键相同,替换;
  2. 主键相同,唯一键不同,替换;
  3. 主键和唯一键均相同,替换;
  4. 主键和唯一键均不同,新增。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值