操作数据库 update 忘了加 where

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

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

9474 次点击
所在节点    数据库
90 条回复
cheng6563
2022-01-21 10:15:45 +08:00
维护过一个屎山,里面的 deleteById 方法里面没有 where 。。
hidemyself
2022-01-21 10:15:54 +08:00
我们线上要三方确认,才能执行
imherer
2022-01-21 10:16:35 +08:00
以前公司有一天上班内部系统所有人都登录不上去了,提示密码错误。后来一看 发现所有账号的密码都是摸一样,结果是一个实习生 update 秘密没加条件,还好是公司内部系统。 从那以后所有开发人员只有查看权限了
jy02201949
2022-01-21 10:17:58 +08:00
update 是 DML 怎么会直接更新呢,除非直接带 commit 上去,兄弟这么勇的啊,不都是先检查一番再提交吗
lawsiki
2022-01-21 10:18:49 +08:00
之前线上有个 update 未拼接上查询条件,跑了一天才发现问题,还好用的 RDS 支持数据恢复
weiwenhao
2022-01-21 10:26:03 +08:00
golang 的 gorm

db.Where(User{})
weiwenhao
2022-01-21 10:27:08 +08:00
几年前遇到的
golang 的 gorm

db.Where(User{
id: 0
}).Update("nickname", "1234)

会直接去掉 where 执行 update
darksword21
2022-01-21 10:28:59 +08:00
mycli 手动挡人集合!
b1ackjack
2022-01-21 10:38:49 +08:00
我司只允许主键匹配的 update
Alchemistboy
2022-01-21 11:32:37 +08:00
打着石膏还工作?啥公司这么狠啊
messi110
2022-01-21 11:33:01 +08:00
有的时候操作 大意就是会犯各种低级错误
所以生产环境一定要 按规范来
icewent
2022-01-21 11:38:17 +08:00
没关系,这种事干一次就能记住,损失越大越深刻。
Rache1
2022-01-21 11:39:41 +08:00
下次注意,MySQL 可以设置一下有安全提示。

https://dev.mysql.com/doc/refman/8.0/en/mysql-tips.html#safe-updates
yuanhuaqiang
2022-01-21 11:51:09 +08:00
oracle flashback 挺好用
seanzxx
2022-01-21 12:10:44 +08:00
曾经一家公司是卖软件给保险公司的,有时候出 bug 了就登录到客户的数据库改改数据,听说一个新人需要删除一批数据,再添加一些新数据,但远程数据库比较慢,他就 Google 了下怎么快速删除记录,查到了 truncate 这个命令,而且他还真敢用,结果导致了一个重大事故
meiyoumingzi6
2022-01-21 12:10:48 +08:00
害 我们小伙伴还有删表的呢
seers
2022-01-21 12:18:57 +08:00
你直接断掉 update 不就行了,直接回滚无事发生,不带条件的 update 一般跑很久够你断掉了
sansanhehe
2022-01-21 12:37:48 +08:00
我一般会把要执行的 SQL 写在 sublime text 上,自己 review 一遍再执行(即使是本地测试环境),生产环境的 SQL 要写进文档里让其他同事一起 review 。养成好习惯,保护好自己的年终奖 😂
eggshell
2022-01-21 12:45:12 +08:00
我司的 SQL 工单后台提交之前会计算一个大概的影响行数,虽然不太准
zhoudaiyu
2022-01-21 12:45:41 +08:00
@zhoudaiyu #2 没读题,没看到是命令行

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

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

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

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

© 2021 V2EX