我有一个如下所示的表,
| id | name | color |
------+--------+---------
| 1 | pear | green |
| 2 | apple | red |
| 3 | banana | yellow |
| 4 | grape | purple |
我想使用“name”列按字母顺序重新排序,并使用此新顺序重置id(自动增量),以得到以下结果
| id | name | color |
------+--------+---------
| 1 | apple | red |
| 2 | banana | yellow |
| 3 | grape | purple |
| 4 | pear | green |
问题:我怎样才能用MYSQL做到这一点呢?
6条答案
按热度按时间owfi6suc1#
重置自动增量的最简单方法是创建另一个表。
MySQL提供了
CREATE TABLE LIKE
和RENAME TABLE
等有用的命令。2hh7jdfx2#
我能问问你为什么要这么做吗?
如果任何人修改了name值或插入了新行,那么将打乱您的排序方案。试图在表中其他地方(name列)已经可用的PK排序中存储一些含义似乎是多余的,因此是个坏主意。
一个更好的解决方案是,当您在应用中使用数据时,不必担心ID列的值,只需对名称列进行排序。
**PS:**很抱歉没有回答。通常我会假设您有一个很好的理由,并给予一个直接解决您正在尝试做的事情的答案,但我注意到从您的其他问题中,您仍然处于数据库设计的早期学习阶段,所以我想帮助您指出正确的方向,而不是帮助您朝着一个不明智的方法前进。
svujldwt3#
您可以从旧表中SELECT INTO一个新表,并根据需要将您的选择排序到中。在新表中具有一个自动递增的ID。如果需要,请删除旧表并重命名新表。
af7jpaap4#
为什么不在查询末尾添加“ORDER BY name ASC”呢?我猜您可能出于某种原因需要ID。
arknldoa5#
如果您有一个带有自动增量主键(例如名为'id')的表,并且其他表不依赖于该键,则处理方法如下。
1.完全删除列ID。
alter table order by column_x, column_y;
1.使用自动增量再次添加主键列“id”。
我用phpmyadmin做过几次,很快就成功了。对一个有主键作为索引的表重新排序是不可能的。这就是为什么你需要先删除它。
如果你需要保留“id”列,但是需要根据其他列重新排序,你需要忽略id列的主键和索引状态并重新排序。然后你需要添加一个新列作为主键/索引。
llycmphe6#
可以保存到临时表,然后截断,然后截断水果表,然后插入,但这可能是一个蹩脚的解决方案。