从一个数据表生成表结构和数据的脚本之后。把脚本复制到另一个数据库执行同步数据结构和数据。 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;