以下存在2种经常用到的语法
使用该语句之前必须确保数据库有唯一主键,每次是根据唯一主键进行更新其他字段的数据
uniq index idx_age_birthday(`age`, `birthday`);
①、insert into sku_price_change_info(nick_name, age, birthday)
values(#{nickName}, #{age}, #{birthday})
on duplicate key update
nick_name = #{name}
②、insert into sku_price_change_info(nick_name, age, birthday)
values(#{nickName}, #{age}, #{birthday})
on duplicate key update
nick_name = if(age < 18, #{nickName}, nick_name)
上述sql语句意思是插入数据的时候,判断唯一主键idx_age_birthday是否与数据库中已有数据有冲突,如果没有冲突,则插入数据;如果有冲突,则返回数据,然后执行更新操作(可以根据返回的数据进行与将要更新的数据进行比较,判断)
与旧值进行比较判断的时候,可以使用 if(判断,iftrue,iffalse)函数进行数据更新
存在的坑:
1、on duplicate key update 不要换行,否则可能会导致mysql解析语法的时候出现错误。
2、每次更新的时候,自增主键id也会+1,所以使用该语句会出现自增主键跳跃的情况
3、如果使用不当会出现死锁的情况