基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。
基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。
基本原则:改动数据库数据前一定要备份。不要自信自己考虑的周全!即便是最简单的替换之类的。
----------------------------------
我觉得我挺认真的了,有些代码都检查下,但是刚才看到前段时间的某些代码发现,自己有个严重的笔误。
是个判断结构,如果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。
看,就是最简单的替换,头脑一热,没有考虑到,都造成了很大的麻烦。
所以,更改数据前必须备份,你不能自认为简单就不会出错!