【问题标题】:Query to Re-index Primary Key of MySQL Database查询以重新索引 MySQL 数据库的主键
【发布时间】:2012-05-01 19:23:14
【问题描述】:

我在 MySQL 中有一个表,它有一个主键列。

让我们说:

ID | Value
1  | One
2  | Two
6  | Three
8  | Four
9  | Five

我是怎么做到的:

ID | Value
1  | One
2  | Two
3  | Three
4  | Four
5  | Five

没有其他表。就一个。 我只希望 ID 属于适当的系列。

有什么建议吗?? 也许是一个查询.. :)

【问题讨论】:

  • 我知道订购。这不是我想要的……我希望 ID 处于完美序列中……

标签: mysql sql auto-increment


【解决方案1】:

甚至还有一种简单的方法可以通过编写此查询来完成结果

SET @newid=0;
UPDATE tablename SET primary_key_id=(@newid:=@newid+1) ORDER BY primary_key_id;

这个查询将从1开始重新索引主键

【讨论】:

  • 这个解决方案很棒,但请考虑到您重申的基于此字段的其他表的关系!如果你在其他表上有更新子句的约束,那没关系,如果没有,你也应该更新其他表上的 ID ;)
  • @qdev 如果表之间有任何关系,那么我们不应该重复主键。
  • 工作纯解决方案。此外,您需要注意使用您正在更新的主键的其他表上可能存在的关系。
【解决方案2】:

在我看来你有两个选择。

1) 创建一个新表并复制现有数据。

2) 向现有表添加另一个自动增量字段,然后删除原始列。

ALTER TABLE tableName ADD NewIdn INT NOT NULL AUTO_INCREMENT KEY

【讨论】:

  • 工作正常.. 感谢解决方案“dbaseman”.. :) 必须先删除 ID 列,因为它不允许使用 AUTO_INCREMENT 的两列。 "更改表 test 删除列 id"
【解决方案3】:

我在 phpmyadmin 中取消选中 A_I 框(自动增量设置),单击保存,然后再次选中,然后再次单击保存。

【讨论】:

    猜你喜欢
    • 2011-10-01
    • 2012-07-22
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多