防止update误操作:MySQL开启安全模式

132 阅读1分钟

给项目配置了Mybatis Plus的逻辑删除,在测试一个更新功能时,发现表中的name列几乎全部更新,debug才知道,我指定了更新条件where id= ? ,但是由于前端未将id正确发送给后端,虽然SQL语句并没有拼接id限制条件,但是mp自动拼接了status=1,1表示正常的数据,导致大量数据被批量更新。

虽然是学习过程中出现的问题,但是为了防止以后再有类似傻瓜操作,查阅资料后得知MySql可以开启 sql_safe_updates官网文档链接

开启 sql_safe_updates 安全模式后,可以避免不加where条件的update、delete操作

开启步骤:

  1. 查看是否开启sql_safe_updates:show variables like 'sql_safe_updates'; 如果是ON,则已开启;

    image.png
  2. 如果为OFF表示未开启,可以执行命令开启:SET SQL_SAFE_UPDATES = 1;

  3. 开启后测试不加 where 条件的更新语句,可以看到mysql报错 image.png

    image.png

  4. 加了where条件,但条件不是索引列,也会报错

    image.png

    image.png

  5. 加了where条件,条件不是索引列,但是有limit,成功

    image.png

  6. 加了where条件,条件是索引列,成功

    image.png

  7. 不加where,但是有limit,成功

    image.png

  8. 开启安全模式后的delete规则类似update,网上有人说,在第7条(不加where,但是有limit)对于delete操作来说是不可行的,但是测试了一下,实际是可以的

    image.png