随着业务的发展。某些业务表会达到很高的量级。这时候某些业务若是牵扯到修改数据结构,就不是简单的alter table
能搞定的事情了sql
话很少说,直接上方案:数据结构
graph LR 复制一个新表 --> 修改表结构 -->拷贝数据 --> 重命名新表 ---> 删除老表
该方案:速度很快的。几百万数据不到1分钟就搞定了(跟表字段数有关,以实际为准,建议分批拷贝)大数据
如下以表A为例子code
CREATE TABLE `A` ( `id` int(11) NOT NULL AUTO_INCREMENT, `is_delete` tinyint(1) DEFAULT NULL, `type` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制一个新表,表结构跟老表一摸同样索引
create table A_new like A;
修改表结构(这里以增长字段为例)table
alter table A_new add column `status` tinyint(8) DEFAULT NULL;
拷贝数据class
insert into A_new (id, is_delete, type) select id, is_delete, type from A
ps:select
若是是增删索引,能够使用下面的sqlim
insert into A_new select * from A
若是数据量较大,能够使用条件语句,分批拷贝(这里以id为例,通常都以create_time为条件)命名
insert into A_new (id, is_delete, type) select id, is_delete, type from A where id > 100000
修改表名
rename table `A` to `A_bak`; rename table `A_new` to `A`;