Mysql 在SQL中将ID重置为逻辑顺序

Mysql 在SQL中将ID重置为逻辑顺序,mysql,sql,Mysql,Sql,我有这样的表,因为有些项目已被删除: +----+--------+--------+--------+------+-----+ | id | nav_id | active | name | link | ... | +----+--------+--------+--------+------+-----+ | 1 | 1 | 1 | Item 1 | .......... | | 6 | 2 | 1 | Item 2 | .........

我有这样的表,因为有些项目已被删除:

+----+--------+--------+--------+------+-----+
| id | nav_id | active | name   | link | ... |
+----+--------+--------+--------+------+-----+
| 1  |    1   |    1   | Item 1 | .......... |
| 6  |    2   |    1   | Item 2 | .......... |
| 15 |    1   |    1   | Item 3 | .......... |
| 16 |    3   |    1   | Item 4 | .......... |
| 75 |    1   |    1   | Item 5 | .......... |
+----+--------+--------+--------+------+-----+

如您所见,ID的顺序为
1、6、15、16、75
,可以很好地排序。但是如果我希望它们是
1,2,3,4,5
,该怎么办?如何重置他们的ID,以便更好地阅读?只是好奇,没有必要。

您可以使用以下查询:

UPDATE mytable AS t1
JOIN (
   SELECT id, @rn := @rn + 1 AS rn   
   FROM mytable
   CROSS JOIN (SELECT @rn := 0) AS v
   ORDER BY id
) AS t2 ON t1.id = t2.id
SET t1.id = t2.rn;

但是,我建议不要执行这样的
更新
。PK值应该是不可变的,因为它们的唯一目的是唯一标识表记录。如果您想更改表格在表示层上的显示方式,可以使用
SELECT
语句轻松地进行更改。

我假设您正在谈论重新分配主键?出于什么原因,您希望它们成为
1、2、3、4
?如果答案是“因为它更好”,那么你可以100%确定你没有做任何有用的事情(这些差距是有原因的)。我想你可以将所有项目复制到一个新表中。但是有什么可能的原因会发生这样的事情呢?为什么要改变识别事物的方式?这似乎会造成比解决问题多得多的问题,但为什么呢?弄乱外键?@jarlh确切地说,弄乱FKs、并发、写入,基本上强迫所有可能出错的东西——出错。都是因为强迫症的问题。
自动增量
不提供序列号。它按顺序递增,但它的工作是提供唯一的数字。出于编号目的,创建另一列并通过触发器填充。我得到键“PRIMARY”的重复条目“33”。在前11张唱片中效果很好,然后就停止了。现在我的表格看起来是这样的:-
55,51
-wth?@debute我无法重现这个问题。你能设置并处理一些示例数据吗?我更改了55和51的ID,然后它就工作了。也许问题是这些ID在较低的ID之前。