mysql 如何把表里的主键重新排序

2014-11-20 19:43:32 +08:00
 xz
主键为id 还有一个字段是time
id越大对应的time也越大
怎么把id重新反序排列呢?
4141 次点击
所在节点    MySQL
7 条回复
weegc
2014-11-20 20:46:53 +08:00
个人觉得id是死的,不应该赋予太多的意义

just id
xfwduke
2014-11-20 20:53:25 +08:00
说的不太清楚哦
order by id desc
order by id asc

这样?
aphay
2014-11-20 21:46:26 +08:00
沿着b+树索引反着读一遍。
ucaime
2014-11-20 22:00:47 +08:00
有个好玩的办法你可以试试
ALTER TABLE `test` ADD `newid` INT(11) UNSIGNED NULL DEFAULT NULL AFTER `id`;

再执行
SET @i := 0;
UPDATE `test` SET `newid` = (@i:=(@i + 1)) order by time desc;

最后:
ALTER TABLE `test` DROP `id`;
ALTER TABLE `test` CHANGE `newid` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;

应该就行了。执行前做好备份
ucaime
2014-11-20 22:05:14 +08:00
@ucaime 忘了个问题,上面这个办法效率还算高,但是有个问题就是id完全重排了,没有实现你说的原位反转。

还有个办法,如果数据量没超过65535,且数据中没有什么特别字段,可以导出excel啊之类的,在excel里反转,然后导出csv啊什么,load进去就行了。
好吧,这个依然太笨
xz
2014-11-20 22:23:01 +08:00
谢谢各位,已经解决了

我是先复制一个表,然后把那个表里的id删了,再倒序复制数据到那个表里,然后再添加id,最后删除原表并重命名复制出的表就可以了
msg7086
2014-11-21 02:17:59 +08:00
Update Set ID = 1000000000 - ID

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/148097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX