带有修改表结构SQL语句的存储过程执行失败!

lxc210 2017-08-11 04:58:09
在一次给同事更新数据库的时候,偶然发现了这个问题。
问题描述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即可。目前也不知道缘由,但亲测可用。

所以,不知道有没有遇到同样问题的啊,交流一下啊,求大牛解惑!
...全文
407 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxc210 2017-10-16
  • 打赏
  • 举报
回复
引用 6 楼 zjcxc 的回复:
简单的写了个存储过程,只的行 alter 部分,没有其他语句,无法重现问题
您写完存储过程后没有DROP掉重新LOAD吧,LOAD 完以后您直接调用该存储过程,看看是否可以啊?
lxc210 2017-10-16
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
另外,按照你的描述,改下存储过程,这相当于重新编译了,那么你这个存储过程的来源是哪里?是之前一直存在的?
存储过程就是自己写的啊
zjcxc 2017-10-16
  • 打赏
  • 举报
回复
DROP掉重新LOAD --------------------------- 这个 DROP + 重新 LOAD 针对的是什么?能否写一个简单的重现问题的示例出来?
zjcxc 2017-10-12
  • 打赏
  • 举报
回复
简单的写了个存储过程,只的行 alter 部分,没有其他语句,无法重现问题
zjcxc 2017-10-12
  • 打赏
  • 举报
回复
另外,按照你的描述,改下存储过程,这相当于重新编译了,那么你这个存储过程的来源是哪里?是之前一直存在的?
zjcxc 2017-10-12
  • 打赏
  • 举报
回复
为什么是加了再改,而不直接加?
lxc210 2017-10-03
  • 打赏
  • 举报
回复
没有人么? 我现在的解决方案是:不再使用修改表结构的语句了,加了有效标志位,做了非物理删除! 来个人啊,不然没法结帖啊。
lxc210 2017-08-12
  • 打赏
  • 举报
回复
有没有人遇到同样或类似的问题啊?
lxc210 2017-08-11
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/100005466 这是个类似问题的帖子 好像有不少人遇到同样的问题,但是同样的问题也许是不同的原因造成的,求过来人指点啊

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧