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 LIKE和RENAME 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)
我可以问你为什么要这样做吗?
如果任何人修改任何名称值或插入新行,它将搞乱你的订购方案.试图在表的其他地方(名称列)中已经可用的PK的排序中存储一些含义似乎是多余的,因此是一个坏主意.
更好的解决方案是不要担心ID列的价值,只需在应用程序中使用数据时对名称列进行排序.
PS:抱歉非答案类型的回复.通常情况下,我认为你有充分的理由,只是给出一个直接解决你想要做的事情的答案,但我从你的其他问题中注意到你仍处于数据库设计的早期学习阶段,所以我想帮助指出你正确的方向,而不是帮助你进一步走向一个不明智的方法.