zoukankan      html  css  js  c++  java
  • 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;

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

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

  • 相关阅读:
    hdu 1978
    hdu 2700
    hdu 1176
    hdu 2390
    hdu 2707
    hdu 1804
    hdu 2703
    hdu 2572
    hdu 1171
    React有状态组件和无状态组件
  • 原文地址:https://www.cnblogs.com/flzs/p/13539897.html
Copyright © 2011-2022 走看看