mysql replace into 缺陷的解决方案

replace into 实现原理是:如果新插入行的主键或唯一键在表中已经存在,则会删除原有记录并插入新行;如果在表中不存在,则直接插入。这样就会存在缺陷,如果某个字段有默认值,在使用replace into做数据修改时会将默认值的字段恢复到默认值,造成数据丢失。

初始数据
在这里插入图片描述
使用replace into 新增或修改数据:

replace into role (role_id, role_name) values (1, '普通用户4')

执行后数据
在这里插入图片描述

role_create_time与role_update_time并没有在修改条件中,但更新了。这样,在使用replace into 就会有隐患。

替代方案

使用on duplicate key做数据新增或修改,类似oraclemerge into

-- 使用on duplicate key修改“普通用户”这条记录
insert into role (role_id, role_name) values (2, '普通用户4') 
on duplicate key update role_name = '普通用户4'

查看数据
在这里插入图片描述

id为2的两个时间并没有更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讓丄帝愛伱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值