美文网首页
MySQL重新组织自增长id

MySQL重新组织自增长id

作者: 不爱吃饭的小孩怎么办 | 来源:发表于2019-12-11 16:15 被阅读0次

    表里的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条数据,非常快!
    大功告成!

    相关文章

      网友评论

          本文标题:MySQL重新组织自增长id

          本文链接:https://www.haomeiwen.com/subject/jmzogctx.html