我有这样的表格,因为有些项目已被删除:
+----+--------+--------+--------+------+-----+
| 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,以便更好地阅读?只是好奇,没有必要。
答案 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
语句轻松完成。