操作数据库 update 忘了加 where

2022-01-21 09:46:25 +08:00
 moonchild

处理一个很不合理的测试需求,需要手动修改数据库若干条记录,平时用惯了 orm ,真在终端写 sql 语句的机会非常少。也是由于基本功太生疏,导致在 select 找到要修改的记录之后直接 update 一敲忘了加 where ,结果把所有数据都更新了,影响是相关所有数据变的不可用,并且影响了前端组件的加载。现在回滚数据库就只能损失一天的数据了,还好是集成环境,如果是生产环境,真不敢想是什么后果。

9476 次点击
所在节点    数据库
90 条回复
gosidealone
2022-01-21 09:50:16 +08:00
数据库线上执行的 sql 还是 dba 审核下吧
zhoudaiyu
2022-01-21 09:50:35 +08:00
CI 中不会检测这种 SQL 吗?
zhangchongjie
2022-01-21 09:52:03 +08:00
🐮回滚吧
sadfQED2
2022-01-21 09:52:16 +08:00
我们线上数据库审核要求 update 不但必须有 where 还必须有 limit
ersic
2022-01-21 09:53:46 +08:00
拿不准就先备份再执行命令
Kontinue
2022-01-21 09:55:36 +08:00
这个时候要讲讲 jb 家的 datagrip 了,基本上风险操作都会提示的。。。
---
Unsafe query: 不带 'where' 的 'Update' 语句会同时更新所有表行
murmur
2022-01-21 09:56:20 +08:00
测试数据不就是这样么,我们都是要在测试环境执行一遍,再把语句给别人发布
lwldcr
2022-01-21 09:57:34 +08:00
出来工作第一年的时候我干过一模一样的事情

最后的结果就是领导陪我修数据修到十一点半,更绝的是当时领导还一只手受伤打着石膏,一只手在敲命令

往事不堪回首啊,曾经的自己真是又年轻又菜,虽然现在年轻都没有了只剩下菜
wolfie
2022-01-21 09:58:00 +08:00
盲猜 navicat 。
一般 GUI 要么提醒没有 where ,要么自动开启事务。
nonoyang
2022-01-21 09:58:46 +08:00
这时候就体现出 autocommit 是 off 的好处了,我每次都得手动 commit 。
MiniGhost
2022-01-21 10:00:57 +08:00
记得是有个配置可以配的,限制 update 必须带 where ,可以避免这种疏忽大意的问题
securityCoding
2022-01-21 10:00:59 +08:00
更新 sql 习惯性的会先 select 一下
FawkesV
2022-01-21 10:01:51 +08:00
之前在小公司的时候, 也有过直接命令行执行 SQL update 处理数据的经历. 每次在执行前都要重复看三次才能执行. 执行的时候心都是悬的.
后来到大了点的公司,生产环境就只有 DBA 才有权限了,都是发邮件去通知执行. 虽然操作上麻烦了,但是有人帮你审核就好多了.
huihuiHK
2022-01-21 10:02:04 +08:00
前段时间本人在生产上执行了一个没有 where 的 update 语句,还好是新功能还在灰度,影响不大
ahsjs
2022-01-21 10:03:38 +08:00
执行 sql 要两个人一起还是有效果的
jjww
2022-01-21 10:04:40 +08:00
出来工作第一年的时候我干过一模一样的事情 +1
onhao
2022-01-21 10:05:51 +08:00
大兄弟 推荐你用 mysqlworkbench https://wuhao.pw/archives/291/
执行 update 都是要 where 和 limit 来限制的,否则会提示安全风险。
Jooooooooo
2022-01-21 10:06:35 +08:00
所以说生产环境一般会开启没有 where 不让 update 的设置, 防这种情况.
didididididi
2022-01-21 10:12:35 +08:00
哈哈哈,我实习第一年也这样弄过,还好废了九牛二虎之力,给恢复了
Veneris
2022-01-21 10:15:20 +08:00
经历过,还好是开发环境,后来另一个同事生产环境来了一次,用阿里云的秒级备份恢复了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829615

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX