危险的 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

微信扫一扫下面的二维码,关注我的公众号 编程大观园 :)


 
posted @   琴水玉  阅读(446)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示