tidb修改字段类型的办法

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语句,将最近生成的数据处理掉,然后再删除修改字段。对数据库的影响降到了最低

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值