一、 操作步骤
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