V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
est
V2EX  ›  分享发现

mysql 里面 UPDATE xxx 不加 WHERE 的严重后果!

  •  
  •   est · 2014-06-12 14:31:21 +08:00 · 8732 次点击
    这是一个创建于 3817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://news.mydrivers.com/1/308/308165.htm


    但是,在修改后台数据的过程中,张扬的数据输入出现了问题,他在最后输入的信息数据,没有添加个人信息。

    这样一来,麻烦大了。因为张扬的动作,该公司40万客户的账户信息都被修改,账户余额都变成了1000元。
    29 条回复    2014-06-13 23:57:07 +08:00
    cst4you
        1
    cst4you  
       2014-06-12 14:34:17 +08:00
    -_,- 低级错误
    meizhile
        2
    meizhile  
       2014-06-12 14:39:43 +08:00
    数据库没有备份机制么
    Zhang
        3
    Zhang  
       2014-06-12 14:45:04 +08:00
    这家伙中学学定语从句的时候打瞌睡了!
    clino
        4
    clino  
       2014-06-12 14:46:28 +08:00
    数据库怎么没先备份呢...
    dong3580
        5
    dong3580  
       2014-06-12 14:47:14 +08:00
    @meizhile
    不是所有的时候都要备份的,有些觉得没备份的必要,但是有时候发生了还是会蛋碎。本来觉得不可能会发生低级错误,没想到还是会“不小心”,就这么犯傻了。
    我去年爬了一个星期的东西,当时有些重复了。
    在Sql server中写了删除语句,执行时候手贱没选中where后面的,结果几百万全部没了,恼了一整夜,又费了一周才重新爬过来。
    ipconfiger
        6
    ipconfiger  
       2014-06-12 14:48:25 +08:00
    常年在生产系统上裸操作的正确的操作习惯是先写select,查处数据核查是要修改的后再把前面改写成update xxx set xxx什么的。
    lj0014
        7
    lj0014  
       2014-06-12 15:01:43 +08:00
    同事也犯过类似的错。。。
    codingpp
        8
    codingpp  
       2014-06-12 15:05:22 +08:00
    如果数据库不是myisam这样的在做update的时候会把原先一条记录标记删除,然后插入一条新的记录

    老数据会被另外的purge进程删掉

    那么在没有被purge前,被update的数据是否可以找回来?

    mysql不清楚有没有命令可以把当前事务版本之前的数据查出来

    如果我犯了这个失误以后,肯定会第一时间把mysql的数据文件保存一份的。
    sanddudu
        9
    sanddudu  
       2014-06-12 15:16:08 +08:00   ❤️ 1
    MySQL Workbench 默认就是不加 where 就不让执行
    awebird
        10
    awebird  
       2014-06-12 15:21:46 +08:00
    之前的公司要求所有的update和delete,不准一次批量执行,必须先select出所有的id,用脚本生成逐条sql,没50条sleep一会再继续..
    还有一种场景是sql是从操作手册的word或者其它会折行的工具拷贝过来的,where条件正好被折行了,特别危险
    mhycy
        11
    mhycy  
       2014-06-12 15:39:30 +08:00
    有记录有备份就恢复去。。。
    leafgray
        12
    leafgray  
       2014-06-12 15:40:29 +08:00
    @ipconfiger 握手。
    yushiro
        13
    yushiro  
       2014-06-12 15:41:23 +08:00
    @ipconfiger +1 我也这么干~
    shizzmk
        14
    shizzmk  
       2014-06-12 17:02:00 +08:00
    居然奇葩低级错误 (─.─|||
    keniusahdu
        15
    keniusahdu  
       2014-06-12 17:04:43 +08:00
    在Oracle SQL Developer中执行过一次没加where条件。你知道手快顺手点了commit 之后是什么心情么。6000多条数据。
    canesten
        16
    canesten  
       2014-06-12 17:08:41 +08:00
    @keniusahdu
    Oracle有时光机的
    充分体现了Oracle的优越性
    xmbaozi
        17
    xmbaozi  
       2014-06-12 17:21:50 +08:00
    操作2000+w的线上表,最怕update。操作前要再三检查where,然后还会在后面写上limit。
    1314258
        18
    1314258  
       2014-06-12 17:50:09 +08:00
    @xmbaozi 心里压力也太大了。。
    AlanZhang
        19
    AlanZhang  
       2014-06-12 19:19:39 +08:00 via iPhone
    一个合格的网站标准:不需要登录登陆数据库操作。
    qiongqi
        20
    qiongqi  
       2014-06-12 19:30:42 +08:00
    这种操作,要rd发语句给dba,让dba执行,dba要在操作前做一次备份
    keniusahdu
        21
    keniusahdu  
       2014-06-12 20:07:39 +08:00
    @canesten 运维跟我说我这个库没备份,给我吓坏了,后来自己用SCN搞定了
    Mutoo
        22
    Mutoo  
       2014-06-12 20:41:06 +08:00
    "但是,最终公司报警,警方介入之后,对后台登陆信息进行还原,并查到张扬的个人账户有问题。"

    NB的警方
    anson0370
        23
    anson0370  
       2014-06-12 22:06:57 +08:00
    我们一个客户公司的某DBA刚刚在一张4KW记录的表里执行了一个没有where的update
    est
        24
    est  
    OP
       2014-06-12 22:38:45 +08:00
    @anson0370 然后绩效工资没了?
    anson0370
        25
    anson0370  
       2014-06-12 22:43:14 +08:00
    @est 然后客户在找我们要运维方案……
    yangqi
        26
    yangqi  
       2014-06-12 23:05:00 +08:00
    发生这种事不用直接丢饭碗的么?
    ayang23
        27
    ayang23  
       2014-06-12 23:38:16 +08:00
    这种血泪教训后,我每次UPDATE都先SELECT,再用LIMIT 1,最后才敢UPDATE。
    meizhile
        28
    meizhile  
       2014-06-13 09:02:40 +08:00
    我也犯过这种错误,线上系统,超过200w记录,不过不是没加where,而是Oracle坑爹的update多更新了数据,那时候年少无知啊,胆子可是很正
    ikan
        29
    ikan  
       2014-06-13 23:57:07 +08:00
    昨天我也刚犯这个错误,幸亏我不是DBA。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 02:50 · PVG 10:50 · LAX 18:50 · JFK 21:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.