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

时间:2016-06-01 12:07:38

标签: mysql sql

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用以下查询:

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;

但是,我建议反对执行此类UPDATE。 PK值应该是不可变的,因为它们的唯一目的是唯一标识表记录。如果要更改表格在表示层上的显示方式,可以使用SELECT语句轻松完成。