操作数据库 update 忘了加 where

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

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

9298 次点击
所在节点    数据库
90 条回复
dallaslu
2022-01-21 12:47:39 +08:00
至少要把 select 的语句复制一下,留着 where 呀
IvanLi127
2022-01-21 12:51:13 +08:00
我操作数据库,都先备份整个库。还好生产环境和我没啥关系,不然太刺激了,受不了,也备份不动
Hanggi
2022-01-21 12:51:53 +08:00
咦?我用的 ORM 如果不写 Where 的话 Update 会报错,所以所有 Update 都有 Where 。
换个 ORM 吧。
xuanbg
2022-01-21 12:52:32 +08:00
不要回滚,用备份恢复数据到新表,然后根据 ID 从新表更新数据到原表即可。这样损失最小。
ClericPy
2022-01-21 12:55:21 +08:00
这个情况... 没什么规范的情况下, 只要是改库都是先 select 吧

反正我吐槽现公司让非开发人员有数据库权限这事一年多了, 都不当回事我也没办法, 开发人员手写 SQL 都那么危险, 还让运营人员直连, 真是没在社会挨过打
CallMeReznov
2022-01-21 12:58:21 +08:00
牛的,10 年前有幸干了一次.
我直接执行了开发传过来的升级脚本.
刚开始执行就听到他人墩墩墩吨的跑来大喊"别执行别执行!"
好家伙把我所有用户的资料全 update 了. 当时我双手都在颤抖...
没办法影响面太大只能直接回滚到一个小时之前.
fanyingmao
2022-01-21 13:01:58 +08:00
每次线上执行语句,我都要测试服先试下,就怕出现这种事故。
feiyangenator
2022-01-21 13:12:41 +08:00
先执行 begin 命令,然后 update ,确保没问题,再执行 commit 命令。
imdong
2022-01-21 13:30:44 +08:00
我们生产的一个脚本里 update 没有 where 好久了,一直没人提,我发现了但我也没提。

最近年底全面测试,被人作为 BUG 提了出来,我才改了的
trcnkq
2022-01-21 13:39:29 +08:00
CLI 手敲 SQL ,习惯先敲 where ,再移到前面敲 update ,防止手抖。。
akira
2022-01-21 13:41:06 +08:00
上 archery ,不要让开发人员直接连数据库去执行 sql
laicanwen
2022-01-21 13:48:58 +08:00
我也干过,还是在生产环境……好在不是什么重要数据,而且刚刚备份完。
SmiteChow
2022-01-21 13:52:28 +08:00
怕什么,又没爆头。
onionKnight888
2022-01-21 13:53:12 +08:00
update xxxx where 1=1
haohong725
2022-01-21 13:55:18 +08:00
update 和 delete 我一般后面都会加上 limit
Asuka0947
2022-01-21 13:57:29 +08:00
现在我都生产环境设置为大红色了,有点警示作用。
photon006
2022-01-21 14:01:07 +08:00
用 dbeaver ,update 不加 where 会有危险警告,确认才会继续执行。
abccccabc
2022-01-21 14:26:53 +08:00
我有幸也干过两次,不过都是在测试环境
zhhqiang
2022-01-21 14:30:23 +08:00
与 rm -rf 执行差不太多
yogogo
2022-01-21 14:45:32 +08:00
@securityCoding
#12 这是好习惯,我也是这样,哈哈哈哈

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

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

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

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

© 2021 V2EX