mysql大数据表添加字段

方案一、老表数据迁移四部曲方案
1、新建老表t_order_goods的备份表t_order_goods_bak,同时加一个字段:isVirtual 并给默认值
2、迁移老表t_order_goods数据到备份表t_order_goods_bak中
3、删除老表t_order_goods
4、新命名备份表t_order_goods_bak表名为t_order_goods
以上的操作步骤2~4建议是在脱机的情况下执行,避免在执行迁移数据过程中有新数据进来,导致新表数据流失不完整

方案二、升级MySQL的服务器版本
1、将现有MySQL版本5.7升级到8.0.12之后的版本
2、然后再执行添加字段操作

方案一:
优势:不用再调整业务层的应用程序代码,只需要DBA迁移表即可
劣势:新表可能会跟老表数据不一致,数据不完整;脱机操作过长可能会影响其他业务的正常运行
方案二:
优势:不影响业务层的应用程序代码,也不会导致数据丢失
劣势:升级过程,必然要脱机,此过程时间过程一样会影响业务的正常运行

经验总结
个人建议在实际情况允许的情况下,如果大家所在的公司也出现类似的问题时,尽可能的还是采用方案三:升级服务器版本
毕竟长远考虑,后续在业务的发展不确定情况下,原始表拓展加新的字段是很正常的一件事,升级到高版本后 因为引入了新的算法:即时算法 所以会毫秒级别的加字段 不会对业务发布上线造成影响

方案一案例:

为了避免这种问题,记录一下比较妥帖的办法

1.创建一个临时的新表,复制旧表的结构

create table `tmp` like `goods`;

2.给新表加上新增的字段

ALTER TABLE `tmp`
    ADD COLUMN `num`  int(10) NOT NULL DEFAULT 0 AFTER `unit`;

3.把旧表的数据复制过来

insert into tmp(id,name,unit) select id,name,unit from goods;

4.重命名

rename table goods to goods_bak;
rename table tmp to goods;

一般情况下,一百多万的数据量,也可以直接进行加字段操作

但是得看服务器的运行情况,如果有大量服务占用内存,添加字段可能会出现问题

原文地址:https://www.cnblogs.com/flzs/p/13539897.html