欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tidb修改字段类型的办法

程序员文章站 2022-03-06 21:20:58
...

tidb有很多的限制,比如新增修改和删除字段一次只能执行一条,比如sql语句比如update一次只能执行几万条。比如不能修改字段的类型。

之前我要修改字段类型只能先把tidb的数据先迁移到mysql上,然后在mysql里面的字段类型修改后,再直接覆盖tidb里的表。在开发阶段是可以的,但是在产品上线以后,时刻产生新的数据,如果要保证正确性,只能停止服务器,但是数据量大的时候,迁移数据的速度会非常慢,先迁移到mysql,然后再迁移到tidb,时间耗时太长,对服务器影响太大。怎么样尽量地减少时间,减少对数据库的影响,我开始考虑到这一点。

我发现tidb虽然不能执行修改字段类型的语句,但是可以新增字段,删除字段,修改字段的名称。于是我就想到了办法。

比如一个监控数据表monitordata,有一个字段cycleTime(int),我想改成double类型。那么我就先新增一个字段cycleTime_new,然后利用update语句将cycleTime的数据加到cycleTime_new上,然后删除cycleTime字段,再修改字段名cycleTime_new为cycleTime。

ALTER TABLE `monitordata`
ADD COLUMN `cycleTime_new`  double;
update monitordata 
set cycleTime_new = cycleTime
where cycleTime_new is null
limit 50000;
commit;
update monitordata 
set cycleTime_new = cycleTime
where cycleTime_new is null
limit 50000;
commit;
update monitordata 
set cycleTime_new = cycleTime
where cycleTime_new is null
limit 50000;
commit;
.......
#重复到所有数据处理完毕
ALTER TABLE `monitordata`
DROP COLUMN `cycleTime`;
ALTER TABLE `monitordata`
CHANGE COLUMN `cycleTime_new` `cycleTime`  double NULL DEFAULT NULL;

其中update字段数据的时间比较长,但是执行的时候并不会影响到生产环境的数据。当我把所有数据处理完毕后,我只要短时间内停一下服务器,然后再执行一次update语句,将最近生成的数据处理掉,然后再删除修改字段。对数据库的影响降到了最低

相关标签: tidb