MySQL插入重复后进行覆盖更新
MySQL插入重复后进行覆盖更新
一、介绍
在MySQL
中,常常会有唯一键的约束,当使用Java
插入重复的值后,会报异常我们需要进行捕获处理。
上面的解决思路,确实是一种办法,但我将介绍一下MySQL
的一种插入写法,可以解决这种插入重复数据的问题。
二、使用
首先,我们先建立一张有唯一键的表,并初始化插入一条数据
1 | CREATE TABLE `tb_user_info` ( |
接下来就将插入一条重复的数据
1 | INSERT INTO `test`.`tb_user_info`(`id`, `name`, `old_name`, `id_card`, `create_time`, `create_user_id`, `update_time`, `update_user_id`) |
会发现出现报错,id_card=50001
已经存在,不允许重复插入
那么我们只要在后面加上ON DUPLICATE KEY UPDATE
语句,就可以完成重复之后的处理,如下
1 | INSERT INTO `test`.`tb_user_info`(`id`, `name`, `old_name`, `id_card`, `create_time`, `create_user_id`, `update_time`, `update_user_id`) |
ON DUPLICATE KEY UPDATE
语句后面跟随着的就是发生重复之后的处理,这边的语句意味着
-
old_name = name
,将曾用名设置为名字 -
name = VALUES(name)
,将名字设置为插入的新名字,VALUES(column)
代表插入的数据 -
update_time = now()
,将更新时间设置为当前时间
这边额外再提示一个点,如果主键是使用自增序列的,使用触发ON DUPLICATE KEY UPDATE
语句后,序列会自动往后移动。
这也就是说,主键会出现断层的现象。
三、最后
以上,就是在MySQL
中,插入时发生唯一键约束后的简单处理。
当然了,这种处理比较简单,只适合单表。
如果异常有涉及多表的处理的话,那还是老老实实捕获异常吧。
我是半月,你我一同共勉!!!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 半月无霜!
评论
ValineDisqus