记一次修改数据类型粗心操作导致数据异常

近在做一次 MySQL 迁 PG 的项目,晚上实施时犯了小错误,在对一个小表数据修改类型时,操作失误,还好开发人员发现及时,没对业务产生严重影响,后来在测试库上做了下测试,重现了整个过程,具体如下:

1 创建测试表

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE ad_tmp (  
xxxx bigint ,
xxxx character varying(20) ,
xxxx integer ,
xxxxxxx character varying(20) ,
platform character varying(20) ,
xxxxxxxxxxx integer ,
config character varying(20) ,
is_check character varying(20) ,
status character varying(20) ,
xxxxxxxxxxxxx bigint ,
xxxxxxxx bigint ,
xxxxxxxxxxx integer);

备注:创建表之后,插入了 200 多条数据,数据插入步骤略。

2 查看表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
mydb=> select count(*) from ad_tmp;  
count
-------
275
(1 row)

mydb=> select distinct config from ad_tmp;
config
--------
2
0
1
(3 rows)

3 更改表结构类型 ( character varying(20) –> smallint )

1
2
mydb=> alter table ad_tmp alter column config type smallint using platform::smallint;  
ALTER TABLE

4 字段类型修改后,核实数据

1
2
3
4
5
mydb=> select distinct config from ad_tmp;  
config
--------
3
(1 row)

备注: 字段 config 的类型由 character varying(20) 更改成 smallint 后,发现数据居然诡异都变成 3 了,细心的朋友可能已经发现这异常原因了,原因很简单,这里就不说明了。可以说是一次低级失误吧,今天记录下。

5 总结

  1. 生产库上的操作一定要谨慎,不管什么时候;
  2. 晚上数据库维护的脚本一定要仔细检查,包括每一步;
  3. 如果有临时情况发生需要修改脚本的地方,也需要仔细检查,切莫因为粗心影响整个项目实施。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/237825.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论