Php 重新索引MySQL INT主键&;重置自动增量
因此,我有一个MySQL数据库,用于PHP站点。在几周的发展过程中,我只剩下以下几点:Php 重新索引MySQL INT主键&;重置自动增量,php,mysql,database,auto-increment,Php,Mysql,Database,Auto Increment,因此,我有一个MySQL数据库,用于PHP站点。在几周的发展过程中,我只剩下以下几点: Table: users id | name ----------- 12| Bob 34| Jen 155| John 154| Kyle 除了数百条记录和数千个ID之外 我正在寻找一个脚本,可以运行该脚本将键重新命名为它们的最低值(保留它们各自的行),然后将AUTO_INCREMENT重置为下一个id 所需的输出将是: Table: users id | name ---------
Table: users
id | name
-----------
12| Bob
34| Jen
155| John
154| Kyle
除了数百条记录和数千个ID之外
我正在寻找一个脚本,可以运行该脚本将键重新命名为它们的最低值(保留它们各自的行),然后将AUTO_INCREMENT
重置为下一个id
所需的输出将是:
Table: users
id | name
-----------
1| Bob
2| Jen
3| Kyle
4| John
和ALTER TABLE users AUTO_INCREMENT=5代码>
(注意Kyle
和John
)
我意识到我必须修复引用users.id
的任何内容
有人知道在MySQL或PHP脚本中执行此操作的方法吗?删除id上的索引
这样做:
SET @rank:=0;
update users
set id=@rank:=@rank+1
order by id;
在id上添加索引为什么需要更改数据库中名称的顺序?您只需在sql查询中添加一个orderbyname
子句,即可按名称的字母顺序获得结果 我之前是通过删除ID列并再次创建它来实现的,但我不确定这会如何影响排序。编辑:我建议你在尝试类似的操作之前先进行备份。这样做有效,但没有修复默认顺序。它仍然列为1,2,4,3
(停止删除你的评论,让我看起来很傻=[)@imoda如果您执行一个简单的查询,如select*from t
,您不必期望任何顺序。表行的顺序未定义。有时,在多次运行同一查询时,您可能会得到不同的结果。我不想按名称的字母顺序排序。我希望它们默认情况下按id
排序,这样我就没有了o为我的查询标记站点范围内的ORDER BY
参数。尝试alter table yourtable ORDER BY id
,但如果您使用的是InnoDB,这很可能不会产生任何效果。我曾一度认为REPLACE…SELECT可能会起作用,但文档说明您不能引用与REPL和ACE(实际上在插入文档中)目标和选择目标。我认为最好的办法是使用PHP脚本创建用户表的临时副本,然后使用“替换…”选择ORDER BY,最后删除临时表。当然,假设@Marc B推荐的语句不起作用。另一个想法是创建一个将使用ORDERBY按字母顺序返回用户的结果,那么您只需编写ORDERBY子句一次,而且它可能会使您的代码^干涸^