MySQL 解决主键递增不连续问题 / 快速插入400万条数据

主键递增不连续解决方法

最近学到了存储过程部分,老师先让我们插入40万条数据,然后再插入400万条数据,助教给我们的提示是先利用for循环跑出40万条数据,然后再copy就行,但是需要改主键的数据(每次copy的时候主键先分别再加40万),emmm,秉承能不多写就绝不多写的人生哲学,为了偷懒,我想的是能否利用设置主键递增的方法,然后每次copy的时候,只需将主键外的其余数据拷贝到新表中,主键可以实现逐次递增。

然后,在我试验的时候,问题来了,我发现插入后的表中数据的主键不太对,以为多插入了数据,找了半天,发现在不同批次插入数据时,主键竟然不是连续递增的,这就是个问题了,至于原因,网上有很多介绍,我在此就不多赘述了(主要是我只是看了个大概,但是不太懂那些专业名词以及具体原理,有需求的小伙伴可以自行百度)

解决方法:只需要在执行新的插入操作时,加上这么一句就可以了

alter table copy1_orders AUTO_INCREMENT=1;

问题和代码我放在下面,可以自行查看:
问题
在这里插入图片描述
要求:
在这里插入图片描述
代码
40万条数据

-- 建表
create table orders1(
	id int not null auto_increment primary key,
	num int,
	hashcode smallint
);
-- 插数据
DELIMITER $$
create procedure insertData()
begin
	declare i int default 1;
	declare num_o int ;
	declare hashnum smallint;
	while i<=400000 do
		set i=i+1;
		set num_o=floor(rand()*5000001);
		set hashnum=floor(rand()*10);
		insert into orders1(num,hashcode) values(num_o,hashnum);
	end while;
end;$$
DELIMITER

/*drop procedure insertData; */
call insertData();

copy400万条数据

create table copy1_orders like orders1;
insert into copy1_orders select * from orders1 ;

DELIMITER $$
create procedure insertData2()
begin
	insert into copy1_orders(id,num,hashcode) select null,num,hashcode from orders1;
end;$$
DELIMITER ;

/*drop procedure insertData2; */
-- 解决主键递增不连续的问题
alter table copy1_orders AUTO_INCREMENT=1; -- *************
call insertData2(); -- 连续调用9次即可生成4000000条数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值