表里的id是主键,并且是自增长的。有天发现id乱了,这个时候想根据另一个字段进行排序,我不可能重新导出来用程序处理,怎么办呢,突然想到一个办法:
基本思路是通过insert into xxx select * from yyyy 这种方法,加上排序,就可以生成正确的序列。
chat_tbl是原表,chat2是临时表。
#复制一个空的临时表,结构与chat_tbl一致:
mysql> create table chat2 like chat_tbl;
Query OK, 0 rows affected (0.02 sec)
#将chat_tbl中数据,根据msg_id字段重新排序后导入chat2。也可以根据server_time字段,反正根据实际业务需要进行排序。
mysql> insert into chat2(msg_id,member,type,server_time,local_time,group_name,text,file_name,local_path,url,location,md5) select msg_id,member,type,server_time,local_time,group_name,text,file_name,local_path,url,location,md5 from chat_tbl order by (msg_id + 0) asc;
Query OK, 730305 rows affected (6.80 sec)
Records: 730305 Duplicates: 0 Warnings: 0
#检查第一条和最后一条数据,确认正确
mysql> select * from chat2 where id = 1;
......
mysql> select * from chat2 where id = 730305;
......
#删除表chat_tbl
mysql> drop table chat_tbl;
Query OK, 0 rows affected (0.04 sec)
#将表chat2重命名为chat_tbl;
mysql> alter table chat2 rename to chat_tbl;
Query OK, 0 rows affected (0.01 sec)
70W条数据,非常快!
大功告成!
网友评论