shardingSphere框架中使用 ON DUPLICATE KEY UPDATE 失效原因

背景:

项目使用shardingSphere进行脱敏加密,原有sql使用 ON DUPLICATE KEY UPDATE(插入记录,若存在即更新),sql异常。具体sql如下:

1.原sql(异常):

  insert into  t_user(
user_name,
user_id,
user_address,
create_time
) values(
#{userName},
#{userId},
#{ userAddress},
now()
) ON DUPLICATE KEY UPDATE(
user_address = #{userName},
update_time = now()
)

2.修改后sql:

 	insert into  t_user(
	user_name,
	user_id,
	user_address,
	create_time
) values(
	#{userName},
	#{userId},
	#{	userAddress},
	now()
) ON DUPLICATE KEY UPDATE(
user_address = values(user_address),
update_time = now()
)

3.小结

在 ON DUPLICATE KEY UPDATE语句中不能使用#{},${}, 需要使用VALUES方法。
具体的逻辑是,先会执行插入的逻辑,当主键冲突时才会执行 ON DUPLICATE KEY UPDATE后面的更新语句,而在执行ON DUPLICATE KEY UPDATE之前,具体的值已经在插入之前解析好了,所以通过values直接取对应的字段值即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值