MYSQL:如何"重新排序"表

car*_*per 6 mysql alphabetical

我有一张如下表,

| id  | name   | color  |
------+--------+---------
| 1   | pear   | green  |
| 2   | apple  | red    |
| 3   | banana | yellow |
| 4   | grape  | purple |
Run Code Online (Sandbox Code Playgroud)

我想使用"名称"列按字母顺序重新排序并使用此新订单重置ID(自动增量)以结束以下操作

| id  | name   | color  |
------+--------+---------
| 1   | apple  | red    |
| 2   | banana | yellow |
| 3   | grape  | purple |
| 4   | pear   | green  |
Run Code Online (Sandbox Code Playgroud)

问题:如何使用MYSQL执行此操作?

Yad*_*ada 13

重置自动增量的最简洁方法是创建另一个表.

MySQL提供诸如命令CREATE TABLE LIKERENAME TABLE其是有用的.

CREATE TABLE table2 LIKE table1;

INSERT INTO table2
  SELECT * FROM table1 ORDER BY name;

DROP TABLE table1;

RENAME TABLE table2 TO table1;
Run Code Online (Sandbox Code Playgroud)

  • 一种更正,您需要从表2中删除PK,然后再从表1中插入;然后不要选择*,而是选择ID以外的所有列。它会像魅力一样工作 (2认同)

Joh*_*nFx 8

我可以问你为什么要这样做吗?

如果任何人修改任何名称值或插入新行,它将搞乱你的订购方案.试图在表的其他地方(名称列)中已经可用的PK的排序中存储一些含义似乎是多余的,因此是一个坏主意.

更好的解决方案是不要担心ID列的价值,只需在应用程序中使用数据时对名称列进行排序.

PS:抱歉非答案类型的回复.通常情况下,我认为你有充分的理由,只是给出一个直接解决你想要做的事情的答案,但我从你的其他问题中注意到你仍处于数据库设计的早期学习阶段,所以我想帮助指出你正确的方向,而不是帮助你进一步走向一个不明智的方法.


Eri*_* J. 7

您可以从旧表中选择一个新表,根据需要订购您的选择.在新表中有一个自动增量ID.如果需要,请删除旧表并重命名新表.