一、 操作步骤

1、备份主表

修改主键前务必备份全表数据,防止操作失误导致数据丢失

CREATE TABLE t_oplog_backup AS SELECT * FROM t_oplog;

2、移除自增属性

id 列的属性,暂时移除 AUTO_INCREMENT

ALTER TABLE t_oplog MODIFY id BIGINT(20) NOT NULL;

直接更新自增列的值会因约束冲突而失败,需先解除自增属性

3、批量更新现有 id

使用变量生成新 id 序列(从 5000000 开始)

SET @new_id = 4999999; 

UPDATE t_oplog 

SET id = (@new_id := @new_id + 1) 

ORDER BY id ASC;

注意:若表数据量大,需分批次更新或使用临时表优化性能。

4、重置自增起始值

重新启 AUTO_INCREMENT 并设置起始值为 5000000 + 当前最大id + 1

ALTER TABLE t_oplog 

MODIFY id BIGINT(20) NOT NULL AUTO_INCREMENT, 

AUTO_INCREMENT = 5000000;

验证:执行 SHOW CREATE TABLE t_oplog; 确认 AUTO_INCREMENT 值已更新

二、注意事项

1. 主键冲突风险

若表中已有 id 接近或超过 5000000,需先检查当前最大 id:

SELECT MAX(id) FROM t_oplog;

确保新起始值大于当前最大 id,否则插入新数据时会因主键重复而失败

2. 外键依赖

如果其他表通过外键关联了 t_oplog.id,需同步更新所有关联表的外键值,否则会导致数据不一致。

3. 性能影响

更新大表的 id 可能耗时较长,建议在低峰期操作,并分批次提交事务:

SET @new_id = 4999999;

UPDATE t_oplog 

SET id = (@new_id := @new_id + 1) 

WHERE id BETWEEN 1000000000000000000000 AND 1000000000000000001000 

ORDER BY id ASC;

4. 自增列类型限制

确保 id 列的数据类型(如 BIGINT)足够容纳新值。若原为 INT,需先扩展类型:

ALTER TABLE t_oplog MODIFY id BIGINT(20) NOT NULL;

BIGINT 最大值为 9223372036854775807,远大于 5000000