这种方式是使用mysql自带的语法但是这种方式必须保证需要去重的列是主键
或者唯一索引
(这样基本百分之50的场景就不能使用了,因为很多场景都是多例同时满足才算重复,允许单例重复的)
插入时候如果发现是重复的,那么删除原来的保留新的
replace INTO `ip_pool_new` ( `ip`, `type`, `score`)
VALUES (1, 1, 10);
插入时候如果发现是重复的,那么修改原来的数据
场景: 若数据表中存在相同主键的记录,我们就更新该条记录。
单条
INSERT INTO mRowUpdate(id,`value`) VALUES(3, 'SuperMan') ON DUPLICATE KEY UPDATE `value`='SuperMan';
多条
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);
不能使用这种方式的几个条件(否则会发生未知问题):
插入时候如果发现是有重复的,那么跳过
INSERT ignore INTO `ip_pool_new` ( id,`ip`, `type`)
VALUES (1,1, 1),(14, 1, 10);
下语句去重 (ip=1 and port=1)
delete from ip_pool_new where id in(
SELECT a.id from (select a.id FROM (select id from ip_pool_new where ip=1 and port=1) as a
where a.id<>(select id from ip_pool_new where ip=1 and port=1 LIMIT 1 )) as a
)
这里我多套了一层派生表
不然会出现1093 - You can’t specify target table ‘ip_pool_new’ for update in FROM clause错误意思是不能自己操作自己
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/121475238
内容来源于网络,如有侵权,请联系作者删除!