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;

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

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

  • 相关阅读:
    codechef Graph on a Table
    CF1063F. String Journey
    BZOJ1547: 周末晚会
    maxsigma
    LOJ#2351. 「JOI 2018 Final」毒蛇越狱
    BZOJ3632: 外太空旅行
    图论:tarjan相关算法复习
    Codeforces 321E. Ciel and Gondolas(凸优化+决策单调性)
    5031. 【NOI2017模拟3.27】B (k次狄利克雷卷积)
    CSAcademy Round 10 Yury's Tree(有根树点分树或kruskal重构树)
  • 原文地址:https://www.cnblogs.com/flzs/p/13539897.html
Copyright © 2011-2022 走看看