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


我在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成为一个合适的系列。

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


15
2018-04-20 07:54


起源


我知道订购。这不是我想要的......我希望ID在完美序列中...... - LearningDeveloper


答案:


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

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

此查询将从主键重新索引 1


35
2018-05-24 15:31



这应该是公认的答案 - paul.ago
改变了我的回答,虽然没试过这个。 - LearningDeveloper
这个解决方案很棒,但请重新考虑基于此字段的其他表格的关系!如果你在其他表上有关于update子句的约束就可以了,如果没有,你也应该更新其他表上的ID;) - qdev
@qdev如果表之间有任何关系,那么我们不应该重复主键。 - Yogesh Suthar


在我看来,你有两个选择。

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

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

ALTER TABLE tableName ADD NewIdn INT NOT NULL AUTO_INCREMENT KEY

10
2018-04-20 08:27



工作正常..感谢解决方案“dbaseman”.. :)不得不首先删除ID列,因为它不允许两列使用AUTO_INCREMENT。 “更改表格 test DROP COLUMN id“ - LearningDeveloper


我在phpmyadmin中通过取消选中A_I框(自动增量设置),单击保存,然后再次检查,然后再次单击保存来完成此操作。


0
2017-07-06 19:00