mysqlreplaceinto实现存在则更新,不存在则插入
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mysqlreplaceinto实现存在则更新,不存在则插⼊测试⽤的mysql数据库:
新建测试表:
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`text` varchar(255) DEFAULT NULL,
`uid` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uid_unique` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上建表三个字段,id是主键⾃增,bigint类型。
uid是字符串,但是加上了唯⼀约束’uid_unique‘。
(1) 添加新的数据
因为库⾥⾯没有新的数据,所以肯定是产⽣⼀条数据。
(2) 产⽣⼀条新的数据,和 id 以及 uid都不冲突的
这个时候,因为id是主键⾃增的,所以这个时候,会产⽣⼀个次于最⼤值的值,就是1002
(3)现在测试 id冲突,但是 uid不冲突的
发现会以id为依据进⾏替换。
(4)测试uid冲突,但是id不冲突的。
结果:
发现会根据uid进⾏替换。
(5)当id和uid都冲突的时候
发现会根据这些进⾏替换。
(6)当uid冲突的时候,且⾃增主键,id为空的时候
发现这个时候会删除这条信息,然后新⽣成⼀个id。
综上所述,总的来说replace into 操作的结果是:⾸先会判断是否存在冲突,可以是主键冲突,也可以是唯⼀约束。
然后删除这些数据,然后再插⼊数据。
删除数据后插⼊的效果就跟insert into是⼀样的。