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初次安装
下一篇: 2008年日常生活的十大发明