1、适用于与id连续的情况,有级联更新外键情况:
update table set id = id - C;
如果是id = id + C,则先需要去掉主键,等设置新主键后再重新设置主键
处理400万条无外键的数据大概需要1分钟
2、使用存储过程:适用于不删除原来的记录,id不连续,有更新级联外键,不需要备份原来记录的情况:
处理2.5万条有外键的数据大概需要850秒
CREATE DEFINER=`j`@`%` PROCEDURE `reset_id`()
BEGIN
DECLARE new_id INT;
DECLARE done INT DEFAULT FALSE;
DECLARE cur cursor for select id from table;
DECLARE CONTINUE HANDLER for not found set done = TRUE;
set @a=1;
open cur;
read_loop: LOOP
fetch cur into new_id;
if done then
leave read_loop;
end if;
update table set id = @a where id = new_id;
set @a = @a + 1;
end loop;
close cur;
END
参考文献: