mysql 插入重复数据_mysql 插入重复数据的处理

demo 数据表

方案一、 insert into table (字段,索引字段) values (字段,索引字段值) on duplicate key update 主键=主键

以上写法是在遇到唯一值的数据可以更新的时候,不要更新,只把主键的值加1

当然了,语法是这个语法,更新的处理可以自己处理,也可以是 id=id 或者 uid=uid+1 自己随便处理

总之,结果是其实没有更新数据,原始数据是不变的,只更新了 key update 后面的字段

前提是要有唯一字段的值,否则是会正常插入数据的

适用于不需要更新,但想知道一共处理了多少条数据的场景,比如抓取数据

当然啦,最好还是不要更新主键,因为你原来对应的主键再加1,可能那个数字会跟下一条数据重复

CREATE TABLE `test` (

`content` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',

`uid` INT(11) UNSIGNED NOT NULL,

`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

PRIMARY KEY (`id`),

UNIQUE INDEX `unique` (`uid`)

)

COLLATE='utf8mb4_unicode_ci'

ENGINE=InnoDB;

0a945969e408

执行更新前.png

执行 insert into test (uid,content) values (2,'four') on duplicate key update id=id+1 之后,发现只更新了 id 其他的数据并没有更新

0a945969e408

执行更新后

方案二、 replace into

0a945969e408

执行前

运行sql replace into test (uid,content) values (3,'three')

0a945969e408

执行后

0a945969e408

改变字段值

总结

必须要有唯一索引

只有唯一索引的值不会变,其他的值都会变,包括自增ID

是先删除旧的数据然后插入新的,在这个过程中,还需要重新维护索引,所以速度会慢

方案三、 insert ignore into 这个语法会忽略报错

方案四,先查询,再做插入还是更新的判断。

四是最不推荐的方案,个人是推荐平时项目中使用 方案二

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值