我在mysql中有一个表,我删除了一些行,但现在id变得像紊乱一样 8,10,11,13,14,16等(这只是一个例子)。几乎是巨大的数据,所以我如何通过查询来订购?
答案 0 :(得分:3)
简短的回答:你没有。
答案很长:行id或者已经具有语义含义,在这种情况下,您肯定会不想要随意“重新编号”8到1和10到2,从而更改数据代表;或者,它是一个毫无意义的伪键,在这种情况下,它与值是什么无关 - 你仍然可以ORDER BY
它,间隙或没有间隙。
XY回答:如果您在查询中出于某种原因需要“行号”,则可以使用以下技巧,该变量会在结果集上增加变量。请注意,我不是通过无意义的id
进行排序,而是通过一些有意义的列进行排序,例如dateInserted
。
SET @rn = 0;
SELECT @rn := @rn + 1 as rn, *
FROM myTable
ORDER BY dateInserted
答案 1 :(得分:1)
使用与此相同的代码。我希望这会对你有所帮助。
SET @count = 0;# MySQL returned an empty result set (i.e. zero rows).
UPDATE `ourtheme_options` SET `ourtheme_options`.`id` = @count:= @count + 1;
答案 2 :(得分:0)
如果您使用的是自动递增值,请不要打扰,因为下一个插入的行将是您在最后一次插入时的增量值的位置。要使用您的示例, 8,10,11,13,14,16将成为1,2,3,4,5,6但是下次你将插入一行它仍将是17,除非你将增量值重新设置为7
此外,我确定你有理由不应该这样做,但我不知道..
无论要回答您的问题,您都可以使用以下内容:
SET @n=0;
UPDATE `table_name` SET `id` = @n := @n + 1 ORDER BY `id`
此外,你可以使用MAX插入带有+1值的下一行,但是你也不应该使用它。见MySQL auto_increment vs max
请参阅我的问题:Mysql Incrementing variable performance,并提及MySQL update a field with an incrementing variable