Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重新索引MySQL INT主键&;重置自动增量_Php_Mysql_Database_Auto Increment - Fatal编程技术网

Php 重新索引MySQL INT主键&;重置自动增量

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 ---------

因此,我有一个MySQL数据库,用于PHP站点。在几周的发展过程中,我只剩下以下几点:

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子句一次,而且它可能会使您的代码^干涸^