Bootstrap

关于mysql自增列起始值与数据实际id不一致的问题

从一个数据表生成表结构和数据的脚本之后。把脚本复制到另一个数据库执行同步数据结构和数据。 Navicat 发生了如下异常提示,并中断了脚本执行:

Duplicate entry '51110' for key 'sys_log.PRIMARY'

然后检查sys_log表的建表脚本,发现有如下行:

ENGINE = InnoDB AUTO_INCREMENT = 51110 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

脚本截图如下:

这大致说明这个表的自增ID他现在的初始值。然后脚本执行数据插入的时候到了这个ID他就报错了。而且sys_log表他现在的实际数据ID不是51110,远大于这个id数字。那我想着能不能修改自增列的初始值,结果还修改不了,但是可以清空表数据。


从网上查询的资料总结,可以用sql语句来重设表的自增列 :

//重置自增列为0

TRUNCATE TABLE table_name;   

下面这种方式自能设置大于当前使用的值,不能设置小于等于当前已经使用的自增列的值。myisam如果设置小于等于,则自增列的值会自动设置为当前最大值加1。innodb则不会改变。

ALTER TABLE sys_log auto_increment=1;

上面这两种方式还不成功的话,只能是sql重建表 

把表转储结构,然后下面的这个AUTO_INCREMENT = 51110  改成AUTO_INCREMENT = 1


ENGINE = InnoDB AUTO_INCREMENT = 51110 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

;