查询以重新索引 MySQL 数据库的主键

Posted

技术标签:

【中文标题】查询以重新索引 MySQL 数据库的主键【英文标题】:Query to Re-index Primary Key of MySQL Database 【发布时间】: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 处于完美序列中…… 【参考方案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 框(自动增量设置),单击保存,然后再次选中,然后再次单击保存。

【讨论】:

以上是关于查询以重新索引 MySQL 数据库的主键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL聚簇索引物理结构及主键查询过程

MySQL聚簇索引物理结构及主键查询过程

数据库中的主键、关键字、索引

mysql 索引

mysql主键索引和普通索引区别

mysql过滤重复数据的问题