危险的 SQL

 

      看下这个 SQL , 有什么问题 ?

<update id="update" parameterType="CreativeGroupDO">
        update dsp_creative_group set gmt_modified = now()
        <if test="title != null">
            ,title = #{title,jdbcType=VARCHAR}
        </if>
        <if test="clickUrl != null">
            ,click_url = #{clickUrl,jdbcType=VARCHAR}
        </if>
        <where>
            <if test="creativeGroupId != null">
                and creative_group_id = #{creativeGroupId,jdbcType=BIGINT}
            </if>
        </where>
    </update>

        

      答案在下面已经用灰白色字体隐去。 请用鼠标滑过查看。

      咋看上去, 没啥问题;  可是, 如果 creativeGroupId = null 呢? 将会更新所有的 dsp_creative_group 记录的 title, clickUrl 为同一个值, 造成数据丢失。 你永远不知道应用程序会在什么时候将 creative_group_id 置为 null , 这几乎是不可控制的。  对于线上系统来说,一旦这样的事情发生, 绝对是灾难级的故障。 教训是: 永远、绝对不要在 update 的 where 字句中增加 if 条件!

 

转载于:https://www.cnblogs.com/lovesqcc/p/4328408.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值