【问题标题】:Re-index table in mysql在mysql中重新索引表
【发布时间】:2015-07-11 09:16:16
【问题描述】:

我的数据库中有一个表,我想重新索引。

因为删除了一些行,我现在有了:

id     name      phone
1      xxxx      xxxxx
4      xxxx      xxxxx
6      xxxx      xxxxx

我想:

id     name      phone
1      xxxx      xxxxx
2      xxxx      xxxxx
3      xxxx      xxxxx

id 已经自动递增。 更改一行的id不会对网站的其他部分产生任何影响,它只是一个非常简单的客户列表。

我在互联网上搜索并发现了一些使用 REPAIR TABLE 的东西,但我不确定它是否适合我的情况:/

感谢您的帮助!

【问题讨论】:

  • 您使用的是什么数据库?您要重新索引哪一列?有什么问题?
  • 问题是我有一些 id 不再存在,因为该行已被删除。我希望使用 1、2、3、4、5 而不是 1、2、6、9、10。我想重置索引并重新创建它们。
  • remove gaps in auto increment 的可能重复项。您应该特别注意this answer,尤其是它在第一段中链接到的外部页面。
  • AUTO_INCREMENT 不适用于此类用途。如果您想要特定的数字,请自己生成它们。差距不会伤害任何东西。

标签: mysql indexing


【解决方案1】:

您可以尝试删除 ID 字段,然后像这样重新创建它:

alter table `my_table` modify column id INT NOT NULL;
alter table `my_table` drop primary key, add primary key(id);
alter table `my_table` modify column id INT NOT NULL AUTO_INCREMENT;

我建议理想情况下首先在开发数据库上尝试这个,或者至少复制你的表并首先在那个上尝试。您不想冒“生产”数据的风险。

【讨论】:

  • 你必须比这更具体,以便任何人都能帮助你。
  • 这个不起作用,因为旧号码永远不会丢失,也不会被替换。您需要 DROP 列才能丢失它们。但随后你失去了订单。所以它就更复杂了——移除 AI,添加一个新的 AI 列等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2021-10-01
  • 2016-01-09
相关资源
最近更新 更多