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直接取对应的字段值即可。

你可能感兴趣的:(笔记,MySql,日常开发问题记录,mysql)