|
精华帖 (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 大家有没有什么好办法? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-30
什么情况下你的应用会依赖于mysql的重启?
|
|
| 返回顶楼 | |
|
时间:2008-05-31
当然不是依赖于mysql重启,只是有时候会碰到mysql需要重启的情况(比如调试程序的时候),只要一重启就会有这样的问题
|
|
| 返回顶楼 | |
|
时间:2008-05-31
其实如果真正是delete id=1000的记录那还没问题,我是需要把记录移到另外一个历史表里的,这就会出现duplicate key的错
|
|
| 返回顶楼 | |
|
时间:2008-05-31
历史表不要用auto incr,把原表id复制过去
|
|
| 返回顶楼 | |
|
时间: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记录了 |
|
| 返回顶楼 | |
|
时间:2008-06-01
google结果:
强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用 LAST_INSERT_ID()函数取得这个编号,并把它赋值给主表的存放序列的数据列 |
|
| 返回顶楼 | |
|
时间: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版本是什么? |
|
| 返回顶楼 | |
|
时间: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)那条记录之外,其他记录都可以转移。 |
|
| 返回顶楼 | |
|
时间: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) |
|
| 返回顶楼 | |







