■■■MYSQL的int型设为自动增量(auto_createment),满了怎么办?

ok1996 2010-09-01 08:49:14
一个BS系统,MYSQL表中有个id字段,int 型,int 型的最大值2147483647
但我这个系统有点特殊,每天需要删除几千条记录,又要增加几千条记录
这样,ID字段的值不断增大, 按照现在的速度,再过两年就要超过2147483647

虽然我的表中总记录数只有几万条,但这样不断删除插入,ID值过大了怎么办? 会不会又从1开始? 因为ID=1的记录早就删除了.
...全文
359 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ok1996 的回复:]
引用 2 楼 feixianxxx 的回复:
2个方法:
1.重新排列你的自增列
2.将字段类型改成bigint

个人介意第一种方法 因为第二种也许会治标不治本


請問如何重新排列?重列排列會不會改變已有記錄ID,因為可能有些記錄ID會被其它表引用
[/Quote]
重新序列化话 确实会改变你的ID ...看来这个不适合你了...

现在你的处理方向2个:
1.你不想改变你的id并且你要它随着记录的插入不断增大id 那么请修改你现在的字段类型 要么在字段类型假设unsigned修饰符 要么修改你的字段类型为bigint

2.你想插入的记录会自动补全你空缺的id值
情况1:如果只是从顶部删除了一些数据 并且你想继续从顶部最大的值添加。比如你有从1-100的记录行,现在你删除了91-100的记录,你继续添加记录,你想id值从91开始,也就是新记录的id值从91开始,myisam和innodb引擎表可以这样:alter table tbname auto_increment=1;
情况2:如果已经含有断层 使用这个方法,只能补上最大的断层。
比如1-10的记录 删除3 7 2个记录 只能补上7 不能补上3
「已注销」 2010-09-02
  • 打赏
  • 举报
回复
bigint不治本的说法似乎不太适用这里,难道楼主的系统会跑100亿年?
除非情况真到了那里,否则,bigint就够了。
ok1996 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feixianxxx 的回复:]
2个方法:
1.重新排列你的自增列
2.将字段类型改成bigint

个人介意第一种方法 因为第二种也许会治标不治本
[/Quote]

請問如何重新排列?重列排列會不會改變已有記錄ID,因為可能有些記錄ID會被其它表引用
zuoxingyu 2010-09-02
  • 打赏
  • 举报
回复
从你的描述来看,你的自增字段只是作为一个唯一性标示字段。

可以在程序里处理,获取唯一数据,这样被删除过的ID,就可以重复使用起来了。
loveflea 2010-09-02
  • 打赏
  • 举报
回复
可以加一个unsigned属性 -> 数量就翻一倍

或者如狼头 所说 改bigint unsigned
feixianxxx 2010-09-02
  • 打赏
  • 举报
回复
2个方法:
1.重新排列你的自增列
2.将字段类型改成bigint

个人介意第一种方法 因为第二种也许会治标不治本
ACMAIN_CHM 2010-09-01
  • 打赏
  • 举报
回复
过了会,报错。建议不要使用INT型 改为BIGINT。

56,679

社区成员

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

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