论坛首页 综合技术版 Database

mysql 的 AUTO_INCREMENT 问题

浏览 4000 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-05-30

主题:msql重启后,table的AUTO_INCREMENT会变成max(id)+1

假设现在的max(id)=1000,此时我delete id=1000的记录,然后restart mysql,其实我希望的是下一条记录的id=1001才对,但mysql会根据max(id)重新计算AUTO_INCREMENT,也就是下条记录又是id=1000

我现在的办法是,restart mysql 后用ALTER TABLE table AUTO_INCREMENT = 1001手动更新AUTO_INCREMENT

大家有没有什么好办法?

   
时间:2008-05-30
什么情况下你的应用会依赖于mysql的重启?
   
0 请登录后投票
时间:2008-05-31
当然不是依赖于mysql重启,只是有时候会碰到mysql需要重启的情况(比如调试程序的时候),只要一重启就会有这样的问题
   
0 请登录后投票
时间:2008-05-31
其实如果真正是delete id=1000的记录那还没问题,我是需要把记录移到另外一个历史表里的,这就会出现duplicate key的错
   
0 请登录后投票
时间:2008-05-31
历史表不要用auto incr,把原表id复制过去
   
0 请登录后投票
时间:2008-05-31
pi1ot 写道
历史表不要用auto incr,把原表id复制过去

恩,可能是我没描述清楚,我的做法就是 你说的这种

假设是这两张表,sometable sometable_duplicate

当我把sometable里id=1000的记录移动到sometable_duplicate里(sometable里id=999的记录还没移动),这时候,sometable的max(id)=999,且sometable_duplicate里存在了id=1000的记录,然后重启数据库,这时候sometable下一条记录就会AUTO_INCREMENT 到1000(这就是问题所在),如果再把这条记录移动到sometable_duplicate时就会出问题,因为sometable_duplicate里已经存在了id=1000记录了
   
0 请登录后投票
时间:2008-06-01
google结果:

强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用 LAST_INSERT_ID()函数取得这个编号,并把它赋值给主表的存放序列的数据列
   
0 请登录后投票
时间:2008-06-01
hama 写道

主题:msql重启后,table的AUTO_INCREMENT会变成max(id)+1

假设现在的max(id)=1000,此时我delete id=1000的记录,然后restart mysql,其实我希望的是下一条记录的id=1001才对,但mysql会根据max(id)重新计算AUTO_INCREMENT,也就是下条记录又是id=1000

我现在的办法是,restart mysql 后用ALTER TABLE table AUTO_INCREMENT = 1001手动更新AUTO_INCREMENT

大家有没有什么好办法?


没有遇到过这种情况,你用的mysql版本是什么?
   
0 请登录后投票
时间:2008-06-02
hama 写道
pi1ot 写道
历史表不要用auto incr,把原表id复制过去

恩,可能是我没描述清楚,我的做法就是 你说的这种

假设是这两张表,sometable sometable_duplicate

当我把sometable里id=1000的记录移动到sometable_duplicate里(sometable里id=999的记录还没移动),这时候,sometable的max(id)=999,且sometable_duplicate里存在了id=1000的记录,然后重启数据库,这时候sometable下一条记录就会AUTO_INCREMENT 到1000(这就是问题所在),如果再把这条记录移动到sometable_duplicate时就会出问题,因为sometable_duplicate里已经存在了id=1000记录了

 

我觉得把sometable的数据移到sometable_duplicate的时候不要移动那条有max(id)的记录。即除max(id)那条记录之外,其他记录都可以转移。

   
0 请登录后投票
时间:2008-06-02
Readonly 写道
hama 写道

主题:msql重启后,table的AUTO_INCREMENT会变成max(id)+1

假设现在的max(id)=1000,此时我delete id=1000的记录,然后restart mysql,其实我希望的是下一条记录的id=1001才对,但mysql会根据max(id)重新计算AUTO_INCREMENT,也就是下条记录又是id=1000

我现在的办法是,restart mysql 后用ALTER TABLE table AUTO_INCREMENT = 1001手动更新AUTO_INCREMENT

大家有没有什么好办法?


没有遇到过这种情况,你用的mysql版本是什么?


mysql Ver 14.12 Distrib 5.0.27, for Win32 (ia32)
   
0 请登录后投票
论坛首页 综合技术版 Database

跳转论坛:
JavaEye推荐