1.首先复制一条sql
在复制前,需要确定该记录是否有主键
若无,则代码非常简单,
insert into gl_energy_meter_data SELECT * from gl_energy_meter_data where dosage="12432";
复制的表名↑ 粘贴的表名↑ ↑ 某个字段的值最好唯一
若有主键,一般是ID,则需要随机生成新的ID
INSERT INTO tb_swing_card ( swing_card_number, swing_card_device_id, swing_card_serial, swing_card_address, swing_card_type, swing_card_time, swing_card_emp_id, 这一块为复制的表的所有字段 swing_card_emp_name, swing_card_organ_name, swing_card_id, swing_card_device_name, swing_card_device_type, swing_card_device_direction, swing_card_organ_id, swing_card_organ_parent_ids, tower_id, tower_name, floor_id, floor_name, region_id, region_name ) SELECT swing_card_number, swing_card_device_id, swing_card_serial, swing_card_address, swing_card_type, swing_card_time, swing_card_emp_id, swing_card_emp_name, swing_card_organ_name, REPLACE (uuid( ), '-', '' ), 这一块为粘贴地点的所有字段,将该id改为自动生成 swing_card_device_name, swing_card_device_type, swing_card_device_direction, swing_card_organ_id, swing_card_organ_parent_ids, tower_id, tower_name, floor_id, floor_name, region_id, region_name FROM tb_swing_card WHERE swing_card_id = "5d9fe31f7359a9141d7ebb5"; 所复制数据的某个字段的值(id)
此时成功生成一条数据,接来下的思路就是循环复制
2.循环一百万次执行
drop procedure if exists test_loop; delimiter // create procedure test_loop() # 创建存储过程 begin declare i int default 1; while i<1000000 循环次数 do # 此处复制1中代码 set i=i+1; end while; commit; end // delimiter ; SELECT * from gl_energy_meter_data; # 复制的表名 CALL test_loop();
3.时间:10万条数据耗时3分钟左右。100万条半小时左右(不知道有没有什么更好的办法)