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

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

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

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

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

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

是个判断结构,如果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。

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

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

 

posted @ 2020-07-18 16:52  html55  阅读(210)  评论(0编辑  收藏  举报