如何重新索引mysql表

mrp*_*atg 9 mysql

我有一个有许多行的表,但它们不正常.我使用字段"id"作为主键.我还有一个"日期"字段,它是一个日期时间字段.

我怎样才能重新索引表格,以便根据日期字段按时间顺序记录条目

Ryu*_*yun 12

如何使用变量进行简单查询:

set @ROW = 0;
UPDATE `tbl_example` SET `id` = @ROW := @ROW+1 ORDER BY `fld_date` ASC;
Run Code Online (Sandbox Code Playgroud)

这将按您的日期命令您的行,如:0,1,2,4,5 ...等.


Jos*_*osh 10

我这样做的方法是创建一个带有自动增量索引的新表,然后选择所有旧表,按日期排序.然后你可以删除你的旧表.


Wyz*_*a-- 9

为什么要将ID序列与日期相关联?这听起来像你想做的,ORDER BY id并按行日期顺序返回行.如果您想要按日期顺序排列,请ORDER BY date改用.

自动增量ID列中的值应视为任意值.依赖于您的ID在日期顺序是一个坏主意.


zom*_*bat 8

以下SQL代码段应该可以执行您想要的操作.

ALTER TABLE test_table ADD COLUMN id2 int unsigned not null;
SET @a:=0;
UPDATE test_table SET id2=@a:=@a+1 ORDER BY `date`;
ALTER TABLE test_table DROP id;
ALTER TABLE test_table CHANGE id2 id int UNSIGNED NOT NULL AUTO_INCREMENT,
    ADD PRIMARY KEY (id);
Run Code Online (Sandbox Code Playgroud)

请记住,一旦开始插入和删除数据,就无法保证自动递增列的顺序,因此除了ORDER BY在查询中指定的顺序之外,不应该依赖任何顺序.这是一项昂贵的操作,因为它需要完全重新创建索引,因此我不建议经常这样做.