在一次给同事更新数据库的时候,偶然发现了这个问题。
问题描述A:给别人更新数据库,先DROP旧库,再用SQL语句来创建新库,库中包括表,存储过程等。更新完后,在调用带有修改表结构SQL语句的存储过程时,会执行失败,而其他不含修改表结构SQL语句的存储过程则正常调用。
出现问题的存储过程部分如下:
红框内包含修改表结构语句。大致意思是,先DROP掉自增列,再重新添加上该列。
报错为:
Error Code: 1062. ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '0' for key 'PRIMARY'
执行完后表数据已经损坏,主键变0。如下图
为了检查是否是因为当前用户权限不够,不能修改表结构,我单步执行了红框内的SQL语句,然而并没有报错!
目前没查到原因。但是找到了一个说不出理由的解决办法(借鉴一位在CSDN论坛上的用户,帖子原址我找不到了),就是:在更新完数据库后,重新保存一下带有修改表结构SQL语句的存储过程就可以正常使用该存储过程!即使在该存储过程中加一个空格,重新APPLY即可。目前也不知道缘由,但亲测可用。
所以,不知道有没有遇到同样问题的啊,交流一下啊,求大牛解惑!