• 你永远不知道什么地方有笔误


    基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。

    基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。

    基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。

    ----------------------------------

    我觉得我挺认真的了,有些代码都检查下,但是刚才看到前段时间的某些代码发现,自己有个严重的笔误。

    是个判断结构,如果a,那么b,否则c。我弄反了,变成了,如果a,那么c,否则b。

    可是数据库里数据已经被改了,可见,时时刻刻更改后不要忘记检查,同时,在改动前数据备份下

    真是挺坑,一个小地方的错误,引发了大的问题,而这不是有心的,不是知识不熟悉,仅仅是个笔误,它看似可以避免,其实又无法避免,因为,谁也不能保证自己没笔误。

    唉!

    ---------------2020-08-09-----------------------------

    批量替换数据库中的数据,因为是替换,觉得很简单,没想到出了大问题!

    这次出问题记录

    任务要求,某字段中的值,如果出现下面A列的值,就替换成B列的值。

     替换,有什么难的?于是开始操作。

    把Excel中这些列,转成SQL语句

    1 UPDATE 数据表名 SET 字段名 = REPLACE(字段名,'A列值1','B列值1');
    2 UPDATE 数据表名 SET 字段名 = REPLACE(字段名,'A列值2','B列值2');
    3 UPDATE 数据表名 SET 字段名 = REPLACE(字段名,'A列值3','B列值3');
    4 ...

     在替换之前,还特意查重了下,发现A列值没有重复的。

    但是但是但是但是但是

    万万没想到啊,还是出了问题了!

    举个例子,Excel中如果是这样的

     在数据库中,某个字段为 dd aaa,按照本意,因为'dd aaa'不是'aaa',不应该替换的,但是我这样的sql语句会把它替换掉。

    成了 dd ddafs ba ds aaa ccc

    而且后面执行替换ccc还会出把ccc再替换一次。

    唯一值得庆幸的是,这次数据没有上面例子Excel中那样重复缠绕,所以,又用sql把A列B列换下位置,重新替换了回来。

    数据改回来后,sql语句重新写成了如下:

    1 UPDATE 数据表名 SET 字段名='B列值1' WHERE Lower(字段名)=Lower('A列值1');
    2 UPDATE 数据表名 SET 字段名='B列值2' WHERE Lower(字段名)=Lower('A列值2');
    3 UPDATE 数据表名 SET 字段名='B列值3' WHERE Lower(字段名)=Lower('A列值3');
    4 ...

    解决问题。

    这样才符合题意,是全匹配再替换,还要考虑到用户输入的数据可能大小写上没有那么严格,所以加了Lower。

    看,就是最简单的替换,头脑一热,没有考虑到,都造成了很大的麻烦。

    所以,更改数据前必须备份,你不能自认为简单就不会出错! 

  • 相关阅读:
    模拟22
    模拟21
    模拟20
    模拟19
    晚测11
    Redis 内存模型
    Redis AOF重写
    基础省选题选做
    八年级上 期中考试祭
    P2049 魔术棋子 题解
  • 原文地址:https://www.cnblogs.com/html55/p/13336344.html
Copyright © 2020-2023  润新知