查询以重新索引 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 数据库的主键的主要内容,如果未能解决你的问题,请参考以下文章